zoukankan      html  css  js  c++  java
  • MySQL触发器 trigger之after与before区分

    after:是先完毕数据的增删改。然后再触发,触发的语句晚于监视的增删改。无法影响前面的增删修改作;也就是说先插入订单记录,再更新商品数量。当商品数量少于订单数量时造成爆库。
    before:先完毕触发。在进行增删改。触发语句先于监视的增删改。我们就有机会推断。改动即将发生的操作。

    案例操作:
    触发器使用after
    当某个订单的数量超过库存的数量时会出现库存为负数。

    造成所谓的爆库问题。

    #创建触发器test4
    CREATE TRIGGER test4
    AFTER
    INSERT
    ON `ord`
    FOR EACH ROW
    BEGIN
    UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;
    END$$


    触发器使用before
    先触发,在推断处理之后再进行增删改不会,依据库存改动了订单的最大数量。

    当然我这仅仅是简单的固定了一个值,事实上能够用语句获取到动态的库存值。

    #创建触发器test5
    CREATE TRIGGER test5
    BEFORE
    INSERT
    ON `ord`
    FOR EACH ROW
    BEGIN
      IF new.much >26 THEN
         SET new.much = 26;
      END IF;
    UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;
    END$$


  • 相关阅读:
    Java反射
    安装python
    查看网页加载速度,并优化
    模型按一个圈摆放(10等分)
    y = n*x 匀速,变速运动
    物体绕圆形做圆周运动
    three.js 相机跟随鼠标移动
    three.js 物体随鼠标移动
    three.js 画正多边形-线性
    ES6的JavaScript数据结构实现之队列
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6796508.html
Copyright © 2011-2022 走看看