MySQL遇到错误:1217 - Cannot delete or update a parent row: a foreign key constraint fails

遇到问题

今天在准备"删库跑路"的时候,有的数据表再删除的时候报了以下错误:

1217 - Cannot delete or update a parent row: a foreign key constraint fails

本着有事找度娘的原则,将这句话百度翻译一下,中文意思是“无法删除或更新父行:外键约束失败”。那这不就好办了,把有外键约束的表删了或者解除约束不就好了。

原因

查看了一下教程发现:

数据表之间经常存在外键关联的情况,这时如果直接删除父表,会破坏数据表的完整性,也会删除失败。

删除父表有以下两种方法:

  • 先删除与它关联的子表,再删除父表;但是这样会同时删除两个表中的数据。
  • 将关联表的外键约束取消,再删除父表;适用于需要保留子表的数据,只删除父表的情况。

解决方法

我们尝试一下第二种方法,这样还可以保留一下子表的数据,至少可以早出来两年 (手动狗头)

  1. 要删除的父表

    CREATE TABLE tb_drop
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(22),
    location VARCHAR (50)
    );
    
  2. 外键关联需要被删除的子表

    CREATE TABLE tb_foreign
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT,
    CONSTRAINT fk_drop_foreign FOREIGN KEY (deptId) REFERENCES tb_drop(id)
    );
    
  3. 此时如果删除tb_drop表,就会报出1217错误,所以要解除外键约束

    ALTER TABLE tb_foreign DROP FOREIGN KEY fk_drop_foreign;
    
  4. 执行成功后,两个表之间的外键约束就解除了,此时删除表就可以了

    dDROP TABLE tb_drop;
    
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远离bug,珍爱头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值