在删除级联替代

时间:2012-07-20 07:58:35

标签: mysql sql phpmyadmin

我正在尝试为子级和父级创建数据库。表格看起来像。

  

ChildTable child-id (pk)| parent-id (fk)| 名称

     

ParentTable parent-id (pk)| 名称

     

FOREIGN KEY ParentTable(parent-id)REFERENCES ChildTable(parent-id)ON DELETE CASCADE

问题:父级可以有多个子级,父级表依赖于子级表。如果父母有两个孩子,我们从 ChildTable 中删除一个子记录,那么它也会删除父记录,而父记录必须存在于另一个记录仍在数据库中的子记录中

是否有任何其他MySQL方法/约束可以满足上述要求。

提前致谢。

  

更新:我想详细解释一下我的问题。

我想将以下规则应用于数据库:

  • 父表中的记录必须始终依赖于子表中的任何一个或两个记录。 (同样添加了FK。)
  • 2个孩子有可能指向同一个parentID
  • 如果我们删除一个有parentID的孩子(比如'abc'),那么如果存在另一个具有相同parentID的孩子,则不能删除父ID。
  • 关于删除具有相同parentID('abc')的第二个孩子现在必须删除它,因为没有带parentID的孩子('abc')。

1 个答案:

答案 0 :(得分:3)

你的外键应该颠倒过来:

FOREIGN KEY parent-id REFERENCES ParentTable(parent-id) ON DELETE CASCADE

您希望子表引用父表中的主键。使用级联删除时要小心:删除父行时,会自动删除其所有子行。

当您删除一个子行时,父行没有任何反应。

更新:您只能使用触发器完成所需的操作。您需要在AFTER DELETE上创建ChildTable触发器,检查是否可以删除ParentTable中的行。