使用子查询创建新触发器时出现问题

时间:2019-07-08 23:15:38

标签: mysql triggers

我正在尝试创建一个触发器,该触发器将在另一个表上有插入时更新列。就我而言,每当我在表student_likes_post中插入新的like时,我都希望表forum_post相应地更新其likes列。这是我的查询:

use mydb;

DELIMITER //
CREATE TRIGGER update_likes
after INSERT
   ON student_likes_post FOR EACH ROW
BEGIN
UPDATE forum_post 
SET forum_post.likes = (
   select count(*) 
   FROM student_likes_post
    WHERE student_likes_post.post_id = forum_post.id
);
END;

DELIMITER;

但是,当我运行它时,它会一直运行下去,什么也没发生。子查询虽然可以单独工作。我在同一表student_likes_post上尝试了其他具有相同问题的触发器。知道如何使它起作用吗?您认为表本身或代码有问题吗?

1 个答案:

答案 0 :(得分:0)

您可能只想更新forum_post中学生喜欢的帖子的行中的 ,而不是forum_posts的所有邮件 all ,对吗?

您的触发器当前正在更新forum_post中的所有行,并为forum_post中的每一行运行一次子查询。

这是编写触发器的另一种方法,它仅更新相应的单个forum_post行:

CREATE TRIGGER update_likes
after INSERT
   ON student_likes_post FOR EACH ROW
BEGIN
 DECLARE like_count INT;

 SELECT COUNT(*) INTO like_count
 FROM student_likes_post WHERE post_id = NEW.post_id;

 UPDATE forum_post 
 SET likes = like_count
 WHERE id = NEW.post_id;
END