本文主要讲述MySQL触发器的概念、原理及使用方法,分享给大家,供大家参考,具体内容如下:
1.触发器的概念
触发器是 MySQL 提供给程序员和数据分析师的一种保证数据完整性的方法,是一种与表事件相关的特殊存储过程,它的执行不是由程序调用或手动启动的,而是由事件触发的。例如,当对某个表进行操作时(,,),就会被激活执行。——百度百科
以上是百度给出的触发器的概念,我对触发器概念的理解就是当你执行一条SQL语句的时候,这条SQL语句的执行会自动触发其他SQL语句的执行,就这么简单。
超级简单描述:sql1->->sqlN,一个sql触发多个sql
2. 触发器创建的四个要素
(1)监测点位(表)
(2)监控事件(//)
(3)触发时间(之后/)
(4)触发事件(//)
3. 创建触发器
需求:下订单时,对应商品的库存要相应减少,即库存要减少购买的商品数量。
订单表:ord
商品表:商品
首先,创建一个表并添加一些数据:
表商品(gid int,name(20),num);表 ord(oid int,gid int,much);转换成商品(1,'cat',40);转换成商品(2,'dog',63);转换成商品(3,'pig',87);
然后按照触发器创建的四个要素来分析:
最后创建触发器:
t1 对每个商品设置 num=num-2,其中 gid = 1;end$
分析:触发器的名字是t1,触发时间是after,监控动作是监控ord表,针对每一行,最后再讲,这里记住就行了,在begin和end之间写上触发事件,这里有一个语句,意思是不管我下什么订单,产品编号为1的产品的库存都会减少2个。
注意:先不要运行上面的代码,因为MySQL默认的结束标识是;,如果运行上面的SQL语句,MySQL在遇到;的时候会自动停止执行,然后结束语句就无法执行了。所以我们需要把MySQL的结束标识改为其他字符,一般是$或者$$,这里我们选择$作为执行的结束标识。使用下面的语句来修改MySQL执行的结束标识。
$ //设置MySQL执行结束标志,默认为;
4.查看和删除现有触发器
(1)查看已有的触发器:show
(2)删除现有的触发器:drop
5. 在触发器中引用行变量
(1)对触发目标执行完操作后,会出现一个新行,如果需要在触发事件中使用此新行中的变量,可以使用new关键字来标明。
(2)对触发目标执行操作后,会产生一个旧行,如果需要在触发事件中使用这个旧行的变量,可以使用old关键字标明。
(3)对触发目标进行操作后,原有的记录为旧行,新的记录为新行,可以使用new、old关键字分别进行操作。
当有订单产生时,减少对应商品的库存,并创建触发器:
在每个商品上设置 num=num-new.much,其中 gid=new.gid;end$
删除订单时,对商品的库存添加相应的修改,并创建触发器:
每个商品设置 num=num+old.much 其中 gid=old.gid;end$
当订单的采购数量更新时,会修改对应商品的库存数量,并创建触发器:
每个商品设置 num=num+old.much-new.much 其中 gid = new.gid;end$
6. after 和
after操作是执行监控动作后触发事件。
操作是在执行监控动作之前先执行触发事件
一般触发器上这两者没有区别,但有时候还是有区别的,比如:
需求:当用户下单超过库存时,修改该订单的订购数量,使最大订购数量与库存相同。分析:先判断订购数量>库存,则将订购数量修改为库存。
创建触发器:
在每个 int 上;num 来自商品,其中 gid = new.gid;如果 new.much > 则设置 new.much = ;结束如果;商品设置 num=num-new.much,其中 gid=new.gid;结束$
注意:这里如果使用after会报错,如果使用after会先执行操作,即插入订单操作,然后判断订单数量和库存,获取新的订单数量,但是订单操作已经执行过了,所以会报错,必须使用这里的操作。
7. 每一行的用途是什么?
在触发器中,触发器分为行触发器和语句触发器
例如:
each row #每一行都会受到影响,并执行触发事件,这称为行触发器 begin sqlN; end$
实施:
设置 xxx=xxx 其中 id>100;
假设修改操作涉及100行,那么sqlN会被触发多少次? 答案:100次。
扩张:
如果语句中没有写for each row,则触发事件只执行一次,不管一次影响多少行。
比如一个人下单5次,购买了5件商品,那么可以使用行级触发器,修改库存5次;使用语句级触发器,触发发货提醒。
不幸的是,MySQL 目前不支持语句级触发器。
对更多MySQL相关内容感兴趣的读者可以查看本站以下专题:《MySQL查询技巧》、《MySQL事务操作技巧》、《MySQL存储过程技巧》、《MySQL数据库锁相关技巧汇总》和《MySQL常用函数汇总》
希望本文对大家的MySQL数据库设计有所帮助。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。