【问题标题】:MYSQL error code 1451: cannot delete or update parent row: a foreign key contraint fails [duplicate]MYSQL错误代码1451:无法删除或更新父行:外键约束失败[重复]
【发布时间】:2019-03-10 16:28:43
【问题描述】:

这是我的桌子:

create table caddy( 
Pnr char(13),
tips varchar(20),
name varchar(20),
primary key(Pnr)
)engine innodb;

create table golfbag( 
brand varchar(20),
type varchar(20),
spelarePnr char(13),
caddyPnr char(13),
primary key(brand, spelarePnr),
foreign key(spelarePnr) references spelare(Pnr),
foreign key(caddyPnr) references caddy(Pnr)
)engine innodb;

如您所见,球童和高尔夫球袋之间存在连接。并且加入必须是这种方式,它不能是相反的方式。

这就是我想做的:

delete from caddy
where caddy.pnr="141414-1414" and caddy.name="Jeppe";

但我只收到错误代码 1451。问题是什么?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您必须定义删除父表时要执行的操作。在您的情况下,您可能希望删除并以这种方式定义它:

    create table golfbag( 
    brand varchar(20),
    type varchar(20),
    spelarePnr char(13),
    caddyPnr char(13),
    primary key(brand, spelarePnr),
    foreign key(spelarePnr) references spelare(Pnr) on delete cascade,
    foreign key(caddyPnr) references caddy(Pnr) on delete cascade
    )engine innodb;
    

    【讨论】:

      【解决方案2】:

      从错误中,存在外键约束问题,这意味着表 golfbag 中有一行或多行包含要从表 caddy 中删除的行的主键作为其外键。

      虽然有一种方法可以强制删除,但不建议这样做,因为这会导致表 golfbag 中出现孤立记录。

      您可以在删除查询之前暂时禁用外键检查,并在执行删除后重新启用它。

      要禁用外键检查,请使用

      SET FOREIGN_KEY_CHECKS = 0;
      

      要启用它,请使用

      SET FOREIGN_KEY_CHECKS = 1;
      

      【讨论】:

      • 非常感谢!它起作用了:D
      • 如果这和你建议的一样糟糕,那你为什么还要提供这个作为答案呢?
      • 提供答案是为了回答他的问题和他的教育。在某些情况下,您确实需要完成这样的事情。这就是我在 Bold 中添加警告的原因
      猜你喜欢
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2017-09-15
      • 1970-01-01
      • 2019-10-24
      • 2022-09-23
      相关资源
      最近更新 更多