insert觸發器
在有了前面的基礎知識后,我們現在來看所支持的每種觸發器類型以及它們的差別。
INSERT 觸發器在 INSERT 語句執行之前或之后執行。需要知道以下幾點:
1.在 INSERT 觸發器代碼內,可引用一個名為 NEW 的虛擬表,訪問被插入的行;
2.在 BEFORE INSERT 觸發器中, NEW 中的值也可以被更新(允許更改被插入的值);
3.對于 AUTO_INCREMENT 列, NEW 在 INSERT 執行之前包含 0 ,在 INSERT執行之后包含新的自動生成值。
下面舉一個例子(一個實際有用的例子)。 AUTO_INCREMENT 列具有MySQL自動賦予的值。確定新生成值的方法,但下面是一種更好的方法:
輸入:
create?trigger?neworder?after?insert?on?orders?for?each?row?select?new?.order_num;
分析:此代碼創建一個名為 neworder 的觸發器,它按照 AFTER INSERT ON orders 執行。在插入一個新訂單到 orders 表時,MySQL生成一個新訂單號并保存到 order_num 中。觸發器從 NEW.order_num 取得這個值并返回它。此觸發器必須按照 AFTER INSERT 執行,因為在 BEFORE INSERT 語句執行之前,新 order_num 還沒有生成。對于 orders 的每次插入使用這個觸發器將總是返回新的訂單號。
為測試這個觸發器,試著插入一下新行,如下所示:
輸入:
insert?into?orders(order_date,cust_id)?values(now(),10001);
輸出:
分析:orders 包 含 3 個 列 。 order_date 和 cust_id 必 須 給 出 ,order_num 由MySQL自動生成,而現在 order_num 還自動被返回。
BEFORE 或 AFTER ? 通常,將 BEFORE 用于數據驗證和凈化(目的是保證插入表中的數據確實是需要的數據)。本提示也適用于 UPDATE 觸發器。
【相關推薦】
1. mysql免費視頻教程
2.?mysql免費視頻教程
3.?mysql免費視頻教程
4.?mysql免費視頻教程
5.?mysql免費視頻教程