after:是先完毕数据的增删改。然后再触发,触发的语句晚于监视的增删改。无法影响前面的增删修改作;也就是说先插入订单记录,再更新商品数量。当商品数量少于订单数量时造成爆库。
before:先完毕触发。在进行增删改。触发语句先于监视的增删改。我们就有机会推断。改动即将发生的操作。
案例操作:
触发器 使用after :
当某个订单的数量超过库存的数量时会出现库存为负数。
造成所谓的爆库问题。
#创建触发器test4CREATE TRIGGER test4AFTERINSERTON `ord`FOR EACH ROWBEGINUPDATE goods SET num= num - new.much WHERE goods_id = new.gid;END$$
触发器 使用before :
先触发,在推断处理之后再进行增删改不会,依据库存改动了订单的最大数量。
当然我这仅仅是简单的固定了一个值,事实上能够用语句获取到动态的库存值。
#创建触发器test5CREATE TRIGGER test5BEFOREINSERTON `ord`FOR EACH ROWBEGIN IF new.much >26 THEN SET new.much = 26; END IF;UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;END$$