如何从外键中删除三个表?

Chr*_*ris 3 sql sql-server sql-server-2005 cascading-deletes

我希望能够选择一个groupID并通过MS SQL Server数据库中的三个表进行级联删除.表格如下所示:

table 1 - GROUP
-------------------------------------------
groupID | description | etc


table 2 - MEMBER
-------------------------------------------
memberID | name | etc


table 3 - MAPPINGTABLE 
-------------------------------------------
mappingID | groupID | memberID
Run Code Online (Sandbox Code Playgroud)

我在想,因为我知道groupID,所以我可以根据groupID从映射表中选择memberID,并从成员表中删除它们,但我通常会得到一个错误:

"DELETE语句与REFERENCE约束冲突... [表格中的FK约束]".

有人能够同时给我一些关于从这三个表中删除的最佳方法的指导吗?

谢谢.

Raj*_*ore 5

您正在遇到参考完整性.不用担心,RI是你的朋友.它是为了保护你.

根据您的结构,如果您尝试删除的行在MappingTable中具有相应的行,则无法从MemberGroup表中删除.

如果系统允许您这样做,那么您将在MappingTable中拥有孤立数据,而不会在成员或组表中使用相应的数据.数据库阻止您删除数据,因为已使用外键约束对数据放置了参照完整性约束.

有类似的选项ON DELETE CASCADE,但它们可能非常致命并且可能导致大量数据丢失.我个人从不实施级联删除.

您应首先从MappingTable中删除行,然后从查找表中删除任何数据(成员,组)

话虽如此,我必须说以下内容:

  1. 在删除数据之前,请备份(并确保您拥有有效的备份)数据.
  2. 创建另一个备份原因数据一旦删除就永远消失.
  3. 请与业务/中小企业联系,通过删除数据来验证您是否做了正确的事情