2016-11-18 41 views
1

也許我只是很密集,但希望有人可以幫忙。我想添加一個DateCreated列的觸發器,當添加一行時觸發。當我嘗試添加我得到MySQL觸發器無法在桌面上插入

,因爲它已經被用於通過調用這個存儲函數/觸發語句不能更新存儲函數/觸發器表「產品」

我從this answer實現這是因爲MySQL在插入之後不會讓我觸發,因爲遞歸循環,但是我的觸發器有更新之前和我正在使用NEW。我錯過了我的觸發器?另外,如果我想要做一個DateModified,我必須改變什麼?

觸發

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON `products` 
FOR EACH ROW UPDATE products SET DateEntered = NOW() WHERE ProductID = NEW.ProductID 
+0

暫停一下,問自己:「更新語句之後的記錄指針在哪裏,它需要執行插入觸發器的位置」,並且您將明白爲什麼不能執行此操作。如果這沒有幫助,問問自己,「表格,行或索引如何鎖定以便插入或更新?」 TLDR:你不能這樣做。嘗試使用AFTER觸發器,你可能會逃避它。 –

回答

0

ProductID是產品表中的唯一鍵嗎?如果是這樣,你的更新基本上只更新產生觸發器的行,對嗎?

所以這是簡單的做到這一點:

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON `products` 
FOR EACH ROW SET NEW.DateEntered = NOW(); 

這隻會在催生觸發行改變DateEntered列的值。

+0

啊,你在兩點上都是正確的。這解決了我的問題,謝謝。 – john

0

插入操作後。即使這確實起作用,您仍有可能更改所有其他行,然後由於違反約束而導致插入失敗。