2012-07-20 87 views
2

我正在尝试为子级和父级创建一个数据库。表看起来像。删除级联备用

ChildTable孩子-ID(PK)| parent-id(fk)|

ParentTable家长ID(PK)|

FOREIGN KEY ParentTable(父ID)参考文献ChildTable(父ID)ON DELETE CASCADE

问题:父母可以有一个以上的孩子和父表依赖于子表。如果家长有两个孩子,我们从儿童表中删除一个儿童记录,它将删除父母,同时父记录必须存在于其记录仍在数据库中的另一孩子。

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

在此先感谢。

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

我想下面的规则适用于数据库:

  • 在父表中的记录必须始终依赖的子表中的任何一个或两个记录。 (对于相同的加入FK)
  • 有可能是2个孩子可以指向相同的parentID
  • 如果删除有一个孩子的parentID(说“ABC”),那么如果存在另一个父ID不能被删除具有相同parentID的孩子。
  • 删除第二个具有相同parentID('abc')的孩子现在必须将其删除,因为没有具有parentID('abc')的孩子。

回答

3

你的外键应该扭转:

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

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

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

UPDATE:你想要的只能使用触发器来完成。您需要在ChildTable上创建一个AFTER DELETE触发器,该触发器检查是否可以删除ParentTable中的一行。

+0

我试过你的解决方案,但phpMyAdmin给出了错误..我也希望父表是可靠的子表,如果我们逆向外键它会改变依赖关系,而我想删除父记录只有当没有孩子时。 – asachanfbd 2012-07-20 11:18:32

+0

我更新了我的问题,并提供了更多的细节。希望能解释我的问题。我也搜查了MYSQL手册,但没有发现任何类似的东西。 – asachanfbd 2012-07-20 11:37:00