如果觸發器(AFTER INSERT)被觸發,如果沒有行被插入?AFTER INSERT觸發器和INSERT IGNORE/ON DUPLICATE KEY更新
即使沒有行插入INSERT IGNORE ...
或INSERT ... ON DUPLICATE KEY UPDATE ...
,觸發器也會被觸發。
這種行爲是否正常?
AFTER INSERT意味着在插入行之後還是在INSERT查詢完成之後?
測試顯示第二個,但爲什麼?
如果觸發器(AFTER INSERT)被觸發,如果沒有行被插入?AFTER INSERT觸發器和INSERT IGNORE/ON DUPLICATE KEY更新
即使沒有行插入INSERT IGNORE ...
或INSERT ... ON DUPLICATE KEY UPDATE ...
,觸發器也會被觸發。
這種行爲是否正常?
AFTER INSERT意味着在插入行之後還是在INSERT查詢完成之後?
測試顯示第二個,但爲什麼?
插入行後,或插入行後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觸發器,具體取決於 是否爲該行的重複鍵。
INSERT:無論何時將新行插入表中,觸發器都會激活; ... - 執行更新的行(由於重複鍵),或者如果指定了'IGNORE',則跳過這些行,算作插入行? – undefined
是的。查看MySQL文檔回答中的最後一段摘錄;它表示:對於INSERT INTO ... ON DUPLICATE KEY UPDATE,BEFORE INSERT觸發器會激活每一行,然後是AFTER INSERT觸發器或兩者都啓動 – Rahul