外键

时间:2008-12-31 05:47:18

标签: sql-server

有人可以,请告诉我删除外键引用的表的最佳方法。

谢谢, 克里斯

5 个答案:

答案 0 :(得分:5)

预期目标是孤立这些记录并且永远不再使用外键吗?如果是这样,前面提到的关于禁用密钥的方法很好,否则你可能想要删除引用你想要首先删除的表的记录(或更新指向更合适的记录,如果在这有意义的话,则为NULL)案件)。我似乎从不同的方向来到这个,你确定外键是没有意义的,如果是这样,为什么不删除呢?在某些时候,有人想要限制这种行为,在禁用约束之前,我确保理解他们的目的并且有理由绕过这些保护措施。

答案 1 :(得分:1)

删除外键约束,然后在没有人强制识别它时删除该表。如果第二个表中的列(未删除的列)未在其他地方使用,那么您应该在删除约束后删除整个列。

答案 2 :(得分:1)

在允许删除由其引用的表之前,您需要删除约束。 SQL Server使用以下语法:

ALTER TABLE <table_name> DROP FOREIGN KEY <foreignkey_name>

请记住,表格上存在引用您要删除的约束,因此这是您应该更改的表格。

答案 3 :(得分:1)

请勿删除具有外键约束的表,而不考虑对外键表的影响。让我解释一下简单地删除外键然后用一个例子来表示的影响。

考虑两个表 - 部分和顺序细节。有一个外键约束,表示部件必须存在才能放入orderdetails表。存储在orderdetail表中的是零件表中零件的ID,而不是零件名称或描述。假设您删除外键然后删除部件表。现在orderdetail表中的所有数据都是完全没用的,因为你无法知道订购的部件是什么。这将包括尚未发货的订单以及客户可能致电的订单并询问有关的订单。此外,您现在无法重新创建该数据,除非通过恢复备份(希望您有一个)。

进一步假设您要删除表并重新创建它以对表进行更改。然后重新加载信息并重新打开外键。在这种情况下,你应该使用alter table而不是drop并重新创建,但如果你不这样做,你最终可能会得到与原来不同的id号,因此现在订单将引用错误的id。这可以安全地完成,但你必须非常仔细地做,并且要考虑后果。

答案 4 :(得分:0)

使用On Delete Cascade