mysql触发器触发条件before和after的区别


before:(insert、update)可以对new进行修改,

after:不能对new进行修改,两者都不能修改old数据。

对于INSERT语句, 只有NEW是合法的;

对于DELETE语句,只有OLD才合法;

对于UPDATE语句,NEW、OLD可以同时使用。

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

before是先完成触发,再增删改,触发的语句先于监视的增删改,这样就可以对new进行修改了;

触发失败时,before时会导致触发事件也失败,after则只是触发器内容失败,但不影响触发事件的执行。



需注意对同一个表的相同触发时间(after/before)的相同触发事件(insert/update/delete),只能定义一个触发器,否则报错

ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'