加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql采用 级触发_Mysql高级之触发器(trigger)

发布时间:2022-12-03 11:03:16 所属栏目:MySql教程 来源:转载
导读: 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)。

看以下事件:

完成下单与减少库存的逻辑
Insert into o (gid,num) value

触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)。

0ddbf2a85e9c7b2fdfd8642f8d7ad6d5.png

看以下事件:

311dca71a2ade30f5d473beaa74b367e.png

完成下单与减少库存的逻辑

Insert into o (gid,num) values (2,3); // 插入语句

Update g set goods_num = goods_num - 3 where id = 2;// 更新过程

这两个逻辑可以看成一个整体,或者说, insert ---> 引来 update

用触发器可以解决上述问题.

我们可以监视某表的变化,当发生某种变化时,触发某个操作.

39e487116cbcd5a0e25a38181c37bf68.png

创建触发器的语法

Create trigger triggerName

After/before insert/update/delete on 表名

For each row #这句话是固定的

Begin

Sql语句; # 一句或多句,insert/update/delete范围内

End;

删除触发器的语法:

Drop trigger 触发器名

查看触发器

Show triggers

33da7e2b6c6a5eea84a832a6cba7f1ca.png

如何在触发器引用行的值

对于insert而言, 新增的行 用new 来表示,

行中的每一列的值 ,用new.列名来表示.

对于 delete来说mysql触发器, 原本有一行,后来被删除,

想引用被删除的这一行,用old,来表示, old.列名,就可以引用被删行中的值.

对于update来说,

被修改的行,

修改前的数据 ,用 old来表示, old.列名引用被修改之前行中的值

修改后的数据,用new 来表示, new.列名引用被修改之后行中的值

2af94ee132d53f665595e17d226e573b.png

c38599813dc0e2585b22494bee348d4b.png

触发器里after 和before的区别

After 是先完成数据的增,删,改再触发,

触发的语句晚于监视的增,删,改,无法影响前面的增删改动作.

Before是先完成触发,再增删改,

触发的语句先于监视的增,删,改发生,我们有机会判断,修改即将发生的操作.

典型案例:

对于所下订单,进行判断,如果订单的数量 > 5 ,就认为是恶意订单,

强制把所订的商品数量改成5

e8cac7cb6c7173c10bf00dabe3703699.png

查看哪些触发器:

d8c9cb6181c886f51b436e30f40bae4f.png

e81e9129b81928c3a36305a7393679f2.png

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!