mysql之触发器before和after的区别
1个回答
展开全部
数据库中触发器before与after认识
Before与After区别:
before:(insert、update)可以对new进行修改;after不能对new进行修改,两者都不能修改old数据。
before是先完成触发,再增删改,触发的语句先于监视的增删改,这样就有机会判断,修改即将发生的操作;
after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新数量;
示例:
商品表g和订单表o和触发器
假设商品表有商品1,数量是10;
在订单表插入一条记录
insert into o(gid,much) values(1,20);
如果创建的触发器是after,则会发现在执行这个语句后,商品1的数量变成了-10。
也就是说触发的语句是在插入订单记录之后才执行的,这个时候是无法判断新插入订单的购买数量。
运用典型案例来区分二者的区别,新建一个触发器:
#监视地点: 商品表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了,就不会出现负数了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询