我在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;
但以防万一,提供一个服务存储过程(或事件(的创建,该过程将定期重新计算累积值。