MySQL间接ON DELETE CASCADE为1:1的关系

时间:2018-04-06 16:25:19

标签: mysql database database-design foreign-keys

我有一个超类型实体及其子类型,有一对一的关系,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}}添加外键),因为有多个子类型。

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