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

如何在MySQL中创建事件,当另一表字段变更时自动删除行?

用MySQL触发器实现状态变更时自动删除关联行

嘿,你的需求用**触发器(Trigger)**来实现会比事件更合适哦——事件是定时执行的任务,而触发器能在表数据发生变更时立刻触发响应,完美匹配你要的「当指定行状态变更时自动删除关联行」的场景。下面是具体的实现方案:

实现步骤

1. 创建触发器

执行以下SQL语句创建触发器,它会在tbl_people表的行数据被更新后,检查是否符合触发条件,然后自动删除tbl_activities里的关联行:

DELIMITER //
CREATE TRIGGER trg_delete_inactive_activities
AFTER UPDATE ON tbl_people
FOR EACH ROW
BEGIN
    -- 仅当ID=3的记录从active变为inactive时触发删除
    IF OLD.STATUS = 'active' AND NEW.STATUS = 'inactive' AND OLD.ID = 3 THEN
        DELETE FROM tbl_activities WHERE ID_NAME = OLD.ID;
    END IF;
END //
DELIMITER ;

2. 代码说明

  • AFTER UPDATE ON tbl_people:指定触发器在tbl_people表的行被更新完成后触发
  • FOR EACH ROW:表示每一行数据更新时都会检查触发条件
  • OLD 和 NEW 是MySQL触发器的内置变量:
    • OLD.STATUS 代表更新前该行的STATUS值
    • NEW.STATUS 代表更新后该行的STATUS值
    • 通过判断OLD.STATUS = 'active' AND NEW.STATUS = 'inactive',确保只有当状态从active变为inactive时才执行删除
    • 加上OLD.ID = 3,限定只针对ID为3的记录生效

测试验证

你可以手动执行更新语句测试效果:

UPDATE tbl_people SET STATUS = 'inactive' WHERE ID = 3;

执行后查看tbl_activities表,ID_NAME=3的行应该已经被自动删除了。

扩展提示

如果之后需要对所有从active变为inactive的tbl_people记录都自动删除关联的tbl_activities行,只需要去掉触发器里的AND OLD.ID = 3条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:33:50