解决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 B WHERE id=OLD.id;
END;