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


目前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则已实现该功能。

你可能感兴趣的:(mysql)