mysql - 当我在我的帖子上插入新评论时,如何在 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));
解决方案
通常,最好让您的查询生成这些类型的数字,而不是设置触发器。你可以用这样的东西来做
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;
为什么这是解决问题的好方法?它比触发器更容易阅读和维护,更不容易失败,并且是声明性的而不是程序性的。
如果你到了这种方法的性能很差的地步,你可以用不同的方式做事。但是,除非您有数百万的帖子和评论,否则您不会到达那里。在那之前,保持简单。