You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用MySQL关系实现likes表操作时同步更新users表相关字段?

解决方案:利用MySQL触发器实现关联表自动更新

针对你的需求,直接通过MySQL的触发器就能实现,无需手动编写额外的业务逻辑代码。以下是具体的触发器实现:

1. 插入likes记录时的触发器

当向likes表插入数据时,同步更新对应用户的total_likes(自增1)和updated_at字段:

DELIMITER //
CREATE TRIGGER after_likes_insert
AFTER INSERT ON likes
FOR EACH ROW
BEGIN
    UPDATE users
    SET total_likes = total_likes + 1,
        updated_at = NOW()
    WHERE id = NEW.user_id;
END //
DELIMITER ;

2. 更新likes记录时的触发器

当likes表的记录被更新时,更新关联用户的updated_at字段(如果更新操作修改了user_id,会同时更新新旧两个用户的更新时间):

DELIMITER //
CREATE TRIGGER after_likes_update
AFTER UPDATE ON likes
FOR EACH ROW
BEGIN
    IF OLD.user_id != NEW.user_id THEN
        UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id;
    END IF;
    UPDATE users SET updated_at = NOW() WHERE id = NEW.user_id;
END //
DELIMITER ;

3. 删除likes记录时的触发器

当likes表的记录被删除时,更新对应用户的updated_at字段:

DELIMITER //
CREATE TRIGGER after_likes_delete
AFTER DELETE ON likes
FOR EACH ROW
BEGIN
    UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id;
    -- 补充:若需删除点赞同步减少total_likes,可启用下方代码
    -- UPDATE users SET total_likes = total_likes - 1 WHERE id = OLD.user_id;
END //
DELIMITER ;

注意事项

  • 若只需要更新日期而非完整时间,可将NOW()替换为CURDATE()。
  • 触发器为行级触发,每条likes记录的增删改操作都会触发一次对users表的更新,保证数据一致性。
  • 建议给users.id和likes.user_id添加外键约束,避免出现无效的user_id,进一步保障数据完整性。

内容的提问来源于stack exchange,提问作者TPArrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:20:38