这是 MySQL 的错误吗?两个表是 Cascaded On Delete。删除父项时,不会触发子项的 AFTER DELETE
Is this a bug of MySQL? Two tables are Cascaded On Delete. When parent is deleted, child's AFTER DELETE is not triggered
我有两个table,假设一个叫parent_table
,另一个叫child_table
。他们的关系被设置为 CASCADE ON DELETE (by Primary Key and Foreign Key).
并且 child_table
有一个名为 child_history_table
的存档 table。我在它的AFTER DELETE触发器中写了一个INSERT语句将删除的记录插入到child_history_table
.
现在的问题是:如果我删除parent_table
的一条记录,当然child_table
的相关记录也会自动删除。但它的 AFTER DELETE 触发器似乎没有被调用。因为历史没有插入记录table.
而如果我手动删除了一条child_table
的记录,它的AFTER DELETE触发器会正常工作,并且一条记录被插入到历史记录中table。
我该如何解决这个问题?唯一的方法是将关系设置为 NO ACTION ON DELETE,并通过在父级的 DELETE 触发器中编写代码来手动删除子级的记录吗?
查看文档:
13.1.18.6 Using FOREIGN KEY Constraints:
...
Note
Cascaded foreign key actions do not activate triggers.
...
我有两个table,假设一个叫parent_table
,另一个叫child_table
。他们的关系被设置为 CASCADE ON DELETE (by Primary Key and Foreign Key).
并且 child_table
有一个名为 child_history_table
的存档 table。我在它的AFTER DELETE触发器中写了一个INSERT语句将删除的记录插入到child_history_table
.
现在的问题是:如果我删除parent_table
的一条记录,当然child_table
的相关记录也会自动删除。但它的 AFTER DELETE 触发器似乎没有被调用。因为历史没有插入记录table.
而如果我手动删除了一条child_table
的记录,它的AFTER DELETE触发器会正常工作,并且一条记录被插入到历史记录中table。
我该如何解决这个问题?唯一的方法是将关系设置为 NO ACTION ON DELETE,并通过在父级的 DELETE 触发器中编写代码来手动删除子级的记录吗?
查看文档:
13.1.18.6 Using FOREIGN KEY Constraints:
...
Note
Cascaded foreign key actions do not activate triggers.
...