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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM