after是先完成資料的增刪改,再觸發,觸發的語句晚於監視的增刪改操作,無法影響前面的增刪改動作;也就是說先插入訂單記錄,再更新商品的數量;
before是先完成觸發,再增刪改,觸發的語句先於監視的增刪改,我們就有機會判斷,修改即將發生的操作;
案例:
商品g 表中juzi 的數量只有20個,但是如果在訂單o中加入超過20了,此時如何解決呢
#创建触发器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$$
以上就是 【MySQL 14】觸發器after和before的內容,更多相關內容請關注PHP中文網(www.php.cn)!