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$$


  • 相关阅读:
    笔记2-斐波那契数列
    笔记1-排序
    C++ 顶层const和底层const ?
    C++指针常量与常量指针的区别?
    C++指针和引用的区别?
    函数指针, 指针函数?
    手机横竖屏问题
    Swift
    Swift 渐变色
    Swift guard 关键字
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6797674.html
Copyright © 2011-2022 走看看