首页 > 解决方案 > 当我在我的帖子上插入新评论时,如何在 MYSQL 中触发充当计数器

问题描述

我想知道如何更新列numberOfComments以显示对帖子发表的评论数。我可以在表格评论上创建触发器并更新表格帖子中的列numberOfComments吗?表看起来像这样。

create table posts (
   post_id int primary key,
   post_subject varchar(255),
   numberOfComments int);

create table comments(
   comment_id int primary key,
   comment_text,
   post_id int,
   foreign key (post_id) references posts(post_id));

标签: mysqldatabase-trigger

解决方案


通常,最好让您的查询生成这些类型的数字,而不是设置触发器。你可以用这样的东西来做

  SELECT p.post_id, p.post_subject, COALESCE(c.ccount) numberOfComments
   FROM posts p
   LEFT JOIN (
                SELECT post_id, COUNT(*) ccount
                  FROM comments
                 GROUP BY post_id
              ) c ON p.post_id = c.post_id;

SQL 是为这种查询创建的;它具有令人惊讶的出色性能,尤其是使用您使用的主键。如果您想了解更多关于为什么性能良好的信息,您可以阅读松散索引扫描。

您可以在数据库中创建一个视图,该视图提供与您建议的表相同的结果,如下所示

CREATE VIEW post_with_comment_count AS
  SELECT p.post_id, p.post_subject, COALESCE(c.ccount) numberOfComments
   FROM posts p
   LEFT JOIN (
                SELECT post_id, COUNT(*) ccount
                  FROM comments
                 GROUP BY post_id
              ) c ON p.post_id = c.post_id;

为什么这是解决问题的好方法?它比触发器更容易阅读和维护,更不容易失败,并且是声明性的而不是程序性的。

如果你到了这种方法的性能很差的地步,你可以用不同的方式做事。但是,除非您有数百万的帖子和评论,否则您不会到达那里。在那之前,保持简单。


推荐阅读