您的位置:首页 > 数据库 > MySQL

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

2015-12-23 16:25 453 查看
目前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;

目前其他数据库如oracle、DB2、SQL Server则已实现该功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql