如果两个表的外键相互引用,如何删除记录?

时间:2010-02-27 10:47:34

标签: sql constraints foreign-keys

删除它们的任何记录都会报告如下错误:

  

错误1451(23000):无法删除或   更新父行:外键   约束失败

如何克服这个问题?

5 个答案:

答案 0 :(得分:5)

选择一条记录,允许将null插入FK列,将其插入,删除其他记录,然后删除第一个记录。

答案 1 :(得分:4)

或者

ON DELETE CASCADE

或为其中一个FK插入NULL(如果您的架构中可能的话),在不知道供应商的情况下无法提供更多信息。

答案 2 :(得分:1)

如果您的列是AllowNull,请将其数据更新为null,然后删除数据。

答案 3 :(得分:1)

ALTER TABLE <table1> NOCHECK CONSTRAINT ALL
GO
ALTER TABLE <table2> NOCHECK CONSTRAINT ALL
GO

DELETE FROM <table1> 
GO
DELETE FROM <table2>
GO

ALTER TABLE <table1> CHECK CONSTRAINT ALL
GO
ALTER TABLE <table2> CHECK CONSTRAINT ALL
GO

答案 4 :(得分:0)

如果两个表都相互引用外键,则很可能数据库设计需要改进。我想这应该叫一个额外的表来处理这个设计。

对于您的问题,您可以将一个表中的FK键字段更新为null,然后在两个表上触发删除。

但为了实现这一目标,请确保事先确定PK并将其删除。