【问题标题】:trigger firing another trigger not working触发器触发另一个触发器不起作用
【发布时间】:2011-05-13 02:48:11
【问题描述】:

我有四个表和两个触发器。

Table A     tirggerA  , when before delete === > insert deleted data into Tabele AAAAA
Table B     tirggerB  , when before delete === > insert deleted data into Tabele BBBBB

问题是triggerB在删除表B中的一些数据时效果很好。

我想从 TableA 中删除数据时,

  1. 删除表A的数据插入到表AAAAA中
  2. 表 B 的已删除数据(与表 A 数据相关)也插入到表 BBBBB 中。

我对表 B 和表 A 的关系使用级联删除。

问题是当 TableA 中的某些数据被删除时,TriggerB 似乎永远不会触发。实际上它应该有效,因为我在这些表之间有级联删除关系。有什么想法吗?

【问题讨论】:

  • 大家好.. 我只是不在两个表之间使用级联删除,只是将表 B 的删除命令放在 tirggerA 中。现在运作良好。谢谢。 :)

标签: mysql sql triggers


【解决方案1】:

答案就是将delete 命令放入表A 的触发器中。

另外你需要把代码放在after delete触发器中,在删除之前,删除还没有发生,可能会被撤消。

DELIMITER $$

CREATE TRIGGER ad_tableA_each AFTER DELETE ON tableA FOR EACH ROW
BEGIN
  INSERT INTO tableAAAA (f1,f2,f3) VALUES (old.f1, old.f2, old.f3);
  DELETE FROM tableB b WHERE b.a_id = old.id; /*use this instead of foreign key*/
END $$

CREATE TRIGGER ad_tableB_each AFTER DELETE ON tableB FOR EACH ROW
BEGIN
  INSERT INTO tableBBBB (f1,f2,f3) VALUES (old.f1, old.f2, old.f3);
END $$

DELIMITER ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多