1

我试图chatroompost.view在更新发生时触发从 1 到 0 的更新,并且chatroompost.likecount <= -5

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”,因为它已被调用此存储函数/触发器的语句使用。

我已经尝试了REPLACE所有AFTER方法,BEFORE但仍然遇到同样的错误。

4

1 回答 1

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 ;  

原因:您无法更新调用触发器的表(聊天室帖子):

在存储的函数或触发器中,不允许修改调用函数或触发器的语句已经使用(用于读取或写入)的表。

这样做会产生错误 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.
于 2017-06-14T09:54:13.007 回答