【问题标题】:How to delete a record when two tables have foreign key referenced to each other?两个表相互引用外键时如何删除一条记录?
【发布时间】:2011-01-21 18:24:51
【问题描述】:

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

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

如何解决这个问题?

【问题讨论】:

  • 如果两个表相互引用,我认为您的数据库设计错误?

标签: sql constraints foreign-keys


【解决方案1】:

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

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

但要做到这一点,请确保提前确定两个 PK 以将它们删除。

【讨论】:

  • 数据库设计可能符合预期:例如,您可以强制执行父行必须至少有一个子行的规则,或者在父行中将子行标记为“默认”。跨度>
【解决方案2】:
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

【讨论】:

【解决方案3】:

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

【讨论】:

    【解决方案4】:

    要么

    ON DELETE CASCADE
    

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

    【讨论】:

      【解决方案5】:

      选择允许nulls 插入FK 列的记录,将其插入那里,删除其他记录,然后删除第一条记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-15
        • 2011-08-07
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多