MySQL触发器示例

0写在之前:

最近在带浙大本科生的数据库系统的上机课,我手里拿到的教学文档非常的老,本人及不习惯老文档里的sql server的操作,就让大家安装的MySQL,这就有了个问题:MySQL上很多SQLserver的操作都无法实现,写触发器时大家遇到很多问题就来问我,于是我探索了一下MySQL触发器的使用。

1触发器要求:

假设有一个借书记录表,规定一张借书卡一学期只能借至多2本书,当借第三本书时,触发器触发,输出不能借三本书,并自动回滚。

2首先数据库

创建数据库 借书记录borrow: 各属性(卡号,借书证号,借期,还期)的类型如下:

cno char(7),

bno char(8),

borrow_date date,

return_date date,

插入两条数据:

1. ('cno4','bno1','2010-9-4','2010-9-10');

2. ('cno4','bno2','2010-9-4','2010-9-10');

结果如下图所示:

3创建触发器

代码如下:

DELIMITER ||

CREATE TRIGGER borrow_warning AFTER INSERT ON borrow FOR EACH ROW

BEGIN

DECLARE num int;

DECLARE msgs VARCHAR(60);

set num =(select count(cno) FROM borrow WHERE cno=new.cno);

IF num>2 THEN

select 'cannot brorow three books' into @msgs;

delete FROM borrow WHERE cno=new.cno AND bno=new.bno ;

END IF;

END ||

创建触发器后记得取消符号声明:DELIMITER ;,后面才能正常使用;

需要注意的是:

1 MySQL的触发器中没有print函数,所以我定义了一个变量msgs,当借了三本书条件触发时,我将需要输出的信息传入变量msgs

2 MySQL的触发器中没有rollback,所以我曲线救国,用delete将新插入的那条记录删除(当然这条删除语句在某些情况下会删错,这里我就懒得深究了)

3查看结果

在此之前我们以插入了两条记录,并且两条记录的cno都是cno4,先查看一下msgs的值:

还没有值,因为我们的触发器还没有触发(虽然我事先插入两条数据,再创建的触发器,不过逻辑上肯定是应该msgs=null的)。那么我再插入一条数据:

报错了,提示无法更新borrow表,其实就是插入了同一个cno的第三条借书记录,触发了触发器,再看看msgs是什么呢:

这正是我们想要的结果。

4结语

MySQL触发器是个天坑,花了我几个小时写这玩意儿,有条件的同学去用sqlserver试试。shit,触发器里的borrow打成了brorow.

mysql触发器求属性和_MySQL触发器demo相关推荐

  1. mysql触发器调用存储过程出错_mysql 触发器中调用存储过程

    想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...

  2. mysql在触发器中调用存储过程_mysql 触发器中调用存储过程

    想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...

  3. mysql触发器联立删除_mysql触发器删除实例1

    mysql>create table t1 (a1 int);mysql>create table t2 (a2 int , b2 char(5));其中t2.a2和t1.a1是对应的,a ...

  4. mysql触发器发送curl请求_mysql触发器作用,好处和curl

    什么是触发器: 触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行. 触发器有什么作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. 2.审计.可以跟踪用户对数据 ...

  5. mysql触发器区分新增 修改_MySQL触发器 , 判断更新操作前后数据是否改变

    改动表为user , 改动后将部分信息写入cfq_tab表 1. 新增触发器 create TRIGGER cfq_on_user_add after insert on user for each ...

  6. mysql 查询语句属性值_MySQL学习——SQL查询语句(一)

    查询数据是指从数据库中获取所需要的数据,查询数据是数据库操作中最常用也是最重要的操作,用户可以根据对数据的需求,使用不同的查询方式,通过不同的查询方式可以获得不同的数据,在MySQL中使用select ...

  7. mysql触发器 存储过程_mysql触发器和存储过程

    Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...

  8. mysql命令行查看表的触发器_Mysql事项,视图,函数,触发器命令(详解)

    事项开启和使用 //修改表的引擎 alter table a engine=myisam; //开启事务 begin; //关闭自动提交 set autocommit=0; //扣100 update ...

  9. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

最新文章

  1. 独家 | 由第一原理导出卷积
  2. 命令行启动tomcat
  3. python实现人脸识别_python人脸识别代码实现丨内附代码
  4. Centos7 Docker私有仓库搭建
  5. a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计
  6. JS-数据类型转换-运算符
  7. 51Nod-1090 3个数和为0【排序+二分查找】
  8. 硬币支付问题(贪心策略)
  9. 40_ZYNQ7020开发板RS485协议通信
  10. 华为手机html查看器,华为手机文件查看管理器
  11. python 狄里克雷平滑_狄里克雷平滑(Dirichlet)、線性插值平滑(Linear Interpolated)、拉普拉斯平滑(Laplacian)...
  12. 电商一定是一元化结构
  13. 135. 精读《极客公园 IFX - 上》
  14. 多线程 join 钉钉考勤
  15. Python 提示 ModuleNotFoundError: No module named ‘common‘
  16. kaldi跑自己数据遇到的问题合集(持续更)
  17. springmvc的过滤器--Filter
  18. Android沙箱自动化安全产品
  19. 计算机是如何跑起来的--读书笔记
  20. django框架中嵌入容联云sdk实现短信发送接口

热门文章

  1. Mongo数据库安装成Windows服务
  2. 几种开源软件授权协议
  3. 魔兽争霸3地图(WarIII Maps):三国猛兽传
  4. FusionCharts V3图表导出图片和PDF属性说明
  5. C#_XXX事件 的重载均与委托System.EventHandler不匹配
  6. ajax 同步加载数据
  7. 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
  8. dg oracle 切换模式_Oracle数据库 DGbroker三种保护模式的切换
  9. c语言源程序最多可能由组成,一个C语言源程序由若干函数组成,其中至少应含有一个()。...
  10. 6.dubbo常用的xml配置有哪些_【面试篇】必须掌握的Spring 常用注解