MySQL 触发器会抛出错误 1442,即使它更新的表与调用触发器的表不同

问题描述 投票:0回答:1

我正在尝试优化我的查询,其中一部分是将“评论数”之类的值存储在自己的列中,而不必每次都使用 COUNT() 。为此,我计划在“评论”表中创建几个触发器。在插入/删除时,它将分别更新 posts.numComments 列 +/- 1。

但是触发器是我的问题所在,我收到此错误:

一般错误:1442 无法更新存储函数/触发器中的表“posts”,因为它已被调用此存储函数/触发器的语句使用。

我的理解意味着您无法更新调用触发器的表,但是据我所知,触发器的任何部分都不会尝试更改调用它的表; “评论”表。它应该只更新帖子表

导致此错误的触发器:

CREATE TRIGGER `increase cache` 
AFTER INSERT ON `comments`
FOR EACH ROW 
UPDATE `posts` 
SET `numComments` = (numComments + 1) 
WHERE postID = NEW.postID

真正难倒我的是,我也在 numLikes 中使用这种方法,并且有一个几乎相同的触发器,运行时没有任何错误:

CREATE TRIGGER `increase cached likes` 
AFTER INSERT ON `likes`
FOR EACH ROW 
UPDATE `posts` 
SET `numlikes` = (numlikes + 1) 
WHERE postID = NEW.postID

post 表上没有触发器,而 comments 表上只有一个在 DELETE 上运行的触发器,所以我真的不知道是什么导致了这个问题。任何帮助将不胜感激!

如果有帮助,我正在使用 MySQL Cluster(我知道触发器不会在节点之间自动复制,这不是我的问题)

我尝试在网上找到解决方案,但找不到遇到此问题的人。

应该发生的情况是,当评论添加到评论表时,评论的帖子的

numComments
列应该增加一,但我不断收到上面的错误。

mysql triggers mysql-cluster mysql-error-1442
1个回答
0
投票

这可能是由于从

INSERT INTO comments
中选择
posts
查询造成的。我通过将 numLikes 和 numComments 移至它们自己的
interactions

来修复此问题
© www.soinside.com 2019 - 2024. All rights reserved.