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

Sql 当两个表的外键相互引用时,如何删除记录?,sql,constraints,foreign-keys,Sql,Constraints,Foreign Keys,删除其中的任何记录都会报告如下错误: 错误1451(23000):无法删除或 更新父行:外键 约束失效 如何克服此问题?选择一条允许在FK列中插入nulls的记录,将其插入FK列,删除其他记录,然后删除第一条记录。 ON DELETE CASCADE 或者为其中一个FK插入NULL(如果架构中可能),在不了解供应商的情况下无法提供更多信息。如果两个表相互引用外键,则数据库设计很可能需要改进。我想这应该需要一张额外的桌子来处理这个设计 对于您的问题,您可以将一个表中的FK key字段更新为nul

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

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


如何克服此问题?

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

ON DELETE CASCADE

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

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

对于您的问题,您可以将一个表中的FK key字段更新为null,然后对两个表进行删除


但要做到这一点,请确保您提前标识了要删除的两个PK。

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

更改表NOCHECK CONSTRAINT ALL
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
去 ALTER TABLE NOCHECK约束ALL 去 删除 去 删除 去 ALTER TABLE CHECK CONSTRAINT ALL 去 ALTER TABLE CHECK CONSTRAINT ALL 去
如果两个表相互引用,我认为您的数据库设计是错误的?数据库设计可能与预期的一样:例如,您可以强制执行一个规则,即父级必须至少有一个子级,或者在父级行中将子行标记为“默认”。可能需要添加解释。这是sql server特有的。。对于mysql,这是有效的: