【发布时间】:2011-01-21 18:24:51
【问题描述】:
删除它们的任何记录都会报如下错误:
ERROR 1451 (23000):无法删除或 更新父行:外键 约束失败
如何解决这个问题?
【问题讨论】:
-
如果两个表相互引用,我认为您的数据库设计错误?
标签: sql constraints foreign-keys
删除它们的任何记录都会报如下错误:
ERROR 1451 (23000):无法删除或 更新父行:外键 约束失败
如何解决这个问题?
【问题讨论】:
标签: sql constraints foreign-keys
如果两个表都相互引用外键,则数据库设计很可能需要改进。我想这应该调用一个额外的表来处理这个设计。
对于您的问题,您可以将一个表中的 FK 键字段更新为 null,然后在两个表上触发删除。
但要做到这一点,请确保提前确定两个 PK 以将它们删除。
【讨论】:
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
【讨论】:
如果您的列是 AllowNull,请将其数据更新为 null,然后删除数据。
【讨论】:
要么
ON DELETE CASCADE
如果可能在您的架构中为其中一个 FK 插入 NULL,则在不了解供应商的情况下无法提供更多信息。
【讨论】:
选择允许nulls 插入FK 列的记录,将其插入那里,删除其他记录,然后删除第一条记录。
【讨论】: