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)!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END