我有一个超类型实体及其子类型,有一对一的关系,ON DELETE
设置为CASCADE
(所以当超级类型被删除时,它的子类-type也被删除)。子类型还与其他一些非相关实体有关系 - 这种关系也有ON DELETE CASCADE
。
super_type
id
sub_type
id
super_type_id ON DELETE CASCADE # references super_type.id
other_table_id ON DELETE CASCADE # references other_table.id
当other_table
的某些记录被删除时,相应的sub_type
记录也会被删除。但这会留下super_type
记录,但没有sub_type
附加。我该如何防止这种情况?
注意:我无法实现"双重关联" (向引用super_type
的{{1}}添加外键),因为有多个子类型。
答案 0 :(得分:1)
您的问题可以通过触发器解决。不幸的是不容易,因为mysql有非常讨厌的功能"如果通过级联参照完整性检查(即在您的情况下)删除行,则不运行触发器。
我过去为避免此问题所做的是删除表格描述中的级联删除。取而代之的是删除super_type,sub_type和other_table中删除的任何行的触发器:
超类型 - 触发 BEFORE 删除以删除子类型条目
子型 - 触发 AFTER 删除以删除超类型
其他表 - 触发 AFTER 删除以删除任何引用它的子类型。
这里是msql-behavior feature / bug的链接:https://bugs.mysql.com/bug.php?id=61555