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约束]".
有人能够同时给我一些关于从这三个表中删除的最佳方法的指导吗?
谢谢.
您正在遇到参考完整性.不用担心,RI是你的朋友.它是为了保护你.
根据您的结构,如果您尝试删除的行在MappingTable中具有相应的行,则无法从Member或Group表中删除.
如果系统允许您这样做,那么您将在MappingTable中拥有孤立数据,而不会在成员或组表中使用相应的数据.数据库阻止您删除数据,因为已使用外键约束对数据放置了参照完整性约束.
有类似的选项ON DELETE CASCADE,但它们可能非常致命并且可能导致大量数据丢失.我个人从不实施级联删除.
您应首先从MappingTable中删除行,然后从查找表中删除任何数据(成员,组)
话虽如此,我必须说以下内容: