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免費影片教學
#以上是MySQL中insert觸發器(插入)詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!