解决mysql级联删除时不会启动delete触发器

本文介绍了在MySQL5.*版本中,当设置外键级联删除后,若目标表未配置对应触发器,可能导致垃圾数据产生的问题。提供了一个解决方法:在主键表中创建触发器间接触发生效B表的触发器,以确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


目前mysql 5.* 版本在级联删除时不会执行delete触发器,当外键级联删除后没有启动触发器可能会产生一些垃圾数据,这些垃圾数据可能因为某些原因(性能或并发控制)而创建了该表,例如设计一个统计表,当某表新增或删除记录时需要该统计表需要有相应的统计变化时,一般会在该表上创建一个触发器,当触发某个条件时会执行统计sql语句,如果该表设置了其他表的级联外键,当其他表删除主键时,该表外键会级联删除,但却不执行该表的删除触发器。

比如 A、B 两个表,A 是主键表,B 是外键表,级联删除。
 
那么 A 表中的记录被删除时,B 表中对应的记录也将被自动删除,如果 B 表中有针对 DELETE 的触发器,这个触发器不会被执行,

解决技巧:


在A表中创建一个触发器间接触发B的触发器。例如:


DROP TRIGGER /*!50032 IF EXISTS */ `trigger_job_delete`$$
CREATE

    TRIGGER `trigger_job_delete` BEFORE DELETE ON `
A
    FOR EACH ROW BEGIN
    
     DELETE FROM
WHERE  id=OLD.id;
 

  END;

目前其他数据库如oracle、DB2、SQL Server则已实现该功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值