有没有办法获得每个用户的评论数量,并在number_of_emments列中自动更新



我在MySQL中有两个类似的表

Users -> user_id , user_name , number_of_comments
Comments -> comment_id , comment , user_id

有没有办法获得每个用户的评论数量,并在number_of_emments列中自动更新?

不推荐使用,但仍然可以解决。仅供学习之用。

CREATE TRIGGER tr_ai_update_n_of_comments
AFTER INSERT ON comments
FOR EACH ROW
UPDATE users
SET number_of_comments = ( SELECT COUNT(*)
FROM comments
WHERE comments.user_id = NEW.user_id )
WHERE user_id = NEW.user_id;

如果comments中的行可能被更新(user_id值发生变化(和/或删除,则创建类似的AFTER DELETE和AFTER UPDATE触发器。

PS。强烈建议您删除users.number_of_comments列,并在需要时根据查询计算实际评论量值。


如果您同意该值可能是近似值(与确切值略有不同(,则可以使用增量触发器。

CREATE TRIGGER tr_ai_update_n_of_comments
AFTER INSERT ON comments
FOR EACH ROW
UPDATE users
SET number_of_comments = number_of_comments + 1
WHERE user_id = NEW.user_id;

但以防万一,提供一个服务存储过程(或事件(的创建,该过程将定期重新计算累积值。

最新更新