程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL觸發器trigger之after與before區分

MySQL觸發器trigger之after與before區分

編輯:MySQL綜合教程

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


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved