2015-04-30 47 views
1

我試圖從1觸發chatroompost.view更新爲0時更新發生,chatroompost.likecount <= -5遇到錯誤1442試圖觸發更新

CREATE TRIGGER `chatroompost_AFTER_UPDATE` 
AFTER UPDATE ON `chatroompost` 
FOR EACH ROW BEGIN 
    IF (NEW.likecount <= -5) THEN 
     UPDATE `chatroompost` SET NEW.`view`='0' WHERE `chatroompost`.`idchatroompost` = OLD.`idchatroompost`; 
    END IF; 
END $$ 
DELIMITER ; 

查詢:

UPDATE `chatroompost` SET likecount='-11' WHERE idchatroompost=1; SELECT *FROM chatroompost; 

但我得到

錯誤代碼:1442.無法更新存儲的函數/觸發器中的表'chatroompost',因爲它已經被stateme使用nt調用了這個存儲的函數/觸發器。

我試圖REPLACE所有AFTERBEFORE,但仍然得到了同樣的錯誤。

+0

http://stackoverflow.com/questions/12203859/mysql-trigger-cannot-update-table-getting-error-1442 – Sush

+0

我特林當update更新發生時chatroompost.view從1更新爲0並且chatroompost.likecount <= - 5 但我得到錯誤代碼:1442.無法更新存儲的函數/觸發器中的表'chatroompost',因爲它已被使用通過調用這個存儲的函數/觸發器的語句。 我試圖將所有的後期更換爲前,但仍然有相同的1442. – user3916122

+0

你檢查了上面的鏈接? – Sush

回答

0

解決方案:使它成爲BEFORE UPDATE ON觸發器,並使用NEW運算符,它將完成這項工作。

DROP TRIGGER IF EXISTS`chatroompost_AFTER_UPDATE` ; 
DELIMITER $$ 
use mydb $$ 

CREATE TRIGGER `chatroompost_AFTER_UPDATE` 
BEFORE UPDATE ON `chatroompost` 
FOR EACH ROW BEGIN 
    IF (NEW.likecount <= -5) THEN 
     NEW.view='0'; 
    END IF; 
END $$ 
DELIMITER ; 

原因:您不能更新在觸發調用表(chatroompost):

在存儲函數或觸發,這是不允許修改 表已經被調用該函數或觸發器的語句使用(用於讀取或寫入) 。

這樣做將產生錯誤1442:

Error Code: 1442 
Can't update table 'chatroompost' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.