我试图触发 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;
但是我得到了
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.
我试过REPLACE
所有AFTER
至 BEFORE
但仍然有同样的错误。
最佳答案
解决方案:将其设置为 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 ;
原因:您无法更新调用触发器的表(聊天室帖子):
Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.
这样做会产生错误 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.
关于mysql - 尝试触发更新时出现错误 1442,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962309/