中易网

mysql之触发器before和after的区别

答案:2  悬赏:50  
解决时间 2021-02-02 08:30
mysql之触发器before和after的区别
最佳答案
数据库中触发器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了,就不会出现负数了
全部回答
区别就是在insert/update/delete的前面还是后面执行trigger。 如果是before就是还没有insert/update/delete的时候就执行,after就是在insert/update/delete之后执行。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
侠盗猎车手4罪恶都市警车在哪
乌龟喜欢在温水(室温的水)里 还是凉水里
求助,火车站安检能查出猫咪吗
277dcv 052 女主角是谁
歌曲:死一样的痛过 女声开头来自那首歌?
Muse Fun西洋乐艺术中心怎么去啊,有知道地址
我现在想买个MP3要去哪买啊
男友爷爷去世该怎么安慰他?只是言语
圆脸适合什么发际线
我现在是幼儿园老师,也是一个班的班主任,性
北京现代和北汽坤宝x55是不是同一个厂生产的
成鑫驾校新津训练基地这个地址在什么地方,我
沙市区荆州沙市区观音垱人民法庭这个地址怎么
南通市第四人民医院药物维持治疗门诊地址在什
蚬壳胃散是痛的时候再服用,还是每天坚持服用
推荐资讯
女人多吃哪些食物容易生男孩
穆公失马的故事道理
九鼎百川图文小西门店地址在哪,我要去那里办
平安西街/日月大道(路口)这个地址在什么地方
鹿晗和sj谁关系好?
天龙八部中那个“造型设计师”的称号怎么来的
市场大街/未来路(路口)在哪里啊,我有事要去
为什么不喝酒就是不会做人?
富路三轮全封闭摩托车二手a7款60发动机哪有卖
手机一段时间不碰他就黑了 摁什么都没反应 然
鑫兴腾达五金建材这个地址在什么地方,我要处
我的笔记本搜索到未设安全机制的无线网络,显
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?