2014-07-11 114 views
0

如果觸發器(AFTER INSERT)被觸發,如果沒有行被插入?AFTER INSERT觸發器和INSERT IGNORE/ON DUPLICATE KEY更新

即使沒有行插入INSERT IGNORE ...INSERT ... ON DUPLICATE KEY UPDATE ...,觸發器也會被觸發。
這種行爲是否正常?

AFTER INSERT意味着在插入行之後還是在INSERT查詢完成之後?
測試顯示第二個,但爲什麼?

回答

2

插入行後,或插入行後INSERT 查詢完成後,AFTER INSERT是否意味着?

MySQL Spec(具體節選)

TRIGER語法:trigger_time:{BEFORE | AFTER}

trigger_time是觸發器動作時間。它可以在之前或之後到 指示觸發器在每行之前或之後激活爲 修改。

•插入:無論何時將新行插入 表中,觸發器都會激活;例如,通過INSERT,LOAD DATA和REPLACE語句。

這樣,觸發器在插入行後激活。

你AE眼見爲實以及MySQL的文件中談到的行爲

這方面的一個潛在的混亂例子是INSERT INTO ... ON 重複鍵UPDATE ...語法:一個BEFORE INSERT觸發器每行激活 ,然後是AFTER INSERT觸發器,或者兩者都是BEFORE UPDATE和AFTER UPDATE觸發器,具體取決於 是否爲該行的重複鍵。

+0

INSERT:無論何時將新行插入表中,觸發器都會激活; ... - 執行更新的行(由於重複鍵),或者如果指定了'IGNORE',則跳過這些行,算作插入行? – undefined

+0

是的。查看MySQL文檔回答中的最後一段摘錄;它表示:對於INSERT INTO ... ON DUPLICATE KEY UPDATE,BEFORE INSERT觸發器會激活每一行,然後是AFTER INSERT觸發器或兩者都啓動 – Rahul