我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

本文主要讲述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数据库设计有所帮助。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/2614.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线