MYSQL 触发器 after 插入的问题

MYSQL 触发器 after 插入的问题,第1张

当然是一行出发一次了,你写的触发器肯定是行级的吧,for each row 有这句吧。

2 不能,因为数据库自身的事物控制,虽然我不清楚到底是先执行的insert 表1,还是触发器,但是如果触发器执行不成功,你的insert肯定也执行不成功的,他们在同一个事务里。

最后:如果你的更新实时性要求不高的话,可以弄个存储过程,一段时间再更新一次,这样效率会高一点,

或者那个for each row 你研究一下是不是有其他可选的方案

after和before的区别:

after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改 *** 作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量

before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的 *** 作;

我们用一个典型案例来区分它们的区别,新建一个触发器:

#监视地点: 商品表o

#监视事件:insert

#触发时间:before

#触发事件:update

案例:当新增一条订单记录时,判断订单的商品数量,如果数量大于10,就默认改为10

create trigger tg6

before insert on o

for each row

begin

if new.much >10 then

set new.much = 10

end if

update g set num = num - new.much where id = new.gid

end$

执行完,把之前创建的after触发器删掉,再来插入一条订单记录:

insert into o(gid,much) valus(1,20)$

执行完会发现订单记录的数量变为10,商品1的数量变为0了,就不会出现负数了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8607472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存