【问题标题】:How to delete a row from Parent table without delete a row from Child table?如何从父表中删除一行而不从子表中删除一行?
【发布时间】:2014-07-16 23:00:04
【问题描述】:

我有一个具有三个外键的父表,但我想单独删除父表中的行,如何实现? 当前使用的查询是

DELETE FROM TableName WHERE ColumnName= '89416'

查询显示错误:Cannot delete or update a parent row: a foreign key constraint fails

【问题讨论】:

  • 别这样!您可以暂时删除外键并从父行中删除,但这会创建孤立记录,这是一件坏事。
  • 嗯,这就是为什么它被称为参照完整性,它被用来防止这种愚蠢的事情:-)
  • 我认为你可以 SET foreign_key_checks = 0;
  • 如果我们要删除父级,为什么要与子级关联..???只需打破关联,然后根据需要执行删除...无论如何都不推荐..

标签: mysql sql


【解决方案1】:

您应该根据您的要求重新设计,我们维护父子关系表关系,因为我们需要连接的数据。

但无论如何,如果你想删除,那么有一个选项(禁用约束,然后在删除后启用)。但又会出问题。

【讨论】:

    【解决方案2】:

    通过创建它来更改您的子表,如下面的示例所示:

    CREATE TABLE Worker (
     WorkerID smallint auto_increment,
     WorkerType  varchar(45) NOT NULL,
     WorkerName  varchar(45) NOT NULL,
     Position    varchar(45) NOT NULL,
     TaxFileNumber int NOT NULL,
     Address    varchar(100) ,
     Phone      varchar(20) ,
     SupervisorID  smallint ,
     PRIMARY KEY (WorkerID),
     FOREIGN KEY (SupervisorID) REFERENCES Worker(WorkerID)
        ON DELETE SET NULL
        ON UPDATE CASCADE
    );
    

    您只需添加ON DELETE SET NULLNO ACTION。在使用之前,请查看 this answer 的类似问题,该问题解释了不同的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-12
      • 2021-12-09
      • 2019-03-04
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多