2011-10-10 14 views
1

這是如何工作的? mysql是否僅在插入或每次插入或更新時才調用BEFORE INSERT觸發器如果要運行的查詢如下所示:「BEFORE INSERT觸發器是否在「insert on duplicate key update」查詢中的每一行執行

INSERT INTO tSomething VALUES(...)ON DUPLICATE KEY UPDATE .....

我想在插入行時根據其他列的值更新列的值,但是我不希望這種行爲用於更新,將會執行的查詢總是上面提到的那個。插入操作後用於本但是,我不能更新使用INSERT後觸發一欄爲

SET NEW.score = NEW.score1 + NEW.score2;

我在某處讀到BEFORE INSERT觸發器在這種情況下會允許每次執行上面的查詢時觸發觸發器。這是真的 ?如果是的話,我該如何使用觸發器來解決這個問題。

回答

0

是否MySQL只在插入的情況下調用AFTER INSERT觸發器或每次插入或更新發生

from the manual

一個BEFORE INSERT觸發器將激活每一行,然後是AFTER INSERT觸發器或者BEFORE UPDATE和AFTER UPDATE觸發器,具體取決於是否存在行的重複鍵

我不確定你到底是什麼。

句子「但是,我不希望這種行爲更新」以某種方式困惑我。如果您唯一擁有的是AFTER INSERT觸發器,那麼如果您運行UPDATE語句,它將不會被觸發。如果你的語句更新了一行,它將觸發一個UPDATE觸發器,而不是你的INSERT觸發器。

+0

我想說的是,在我的情況下,我只使用上面提到的查詢來插入和更新。爲了在要插入的行中實現更改col值作爲其他col值的函數的行爲,應該使用BEFORE INSERT或AFTER INSERT? BEFORE INSERT觸發器將針對上述每個查詢「q」執行。但是,AFTER INSERT只會在通過該SQL執行的插入時被解僱。但使用AFTER INSERT後,我無法將列設置爲「SET NEW.col = .....」,因爲您無法在插入觸發器後設置NEW。 –

相關問題