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

 更新时间:2024年06月05日 10:16:55   作者:远离bug,珍爱头发  
这篇文章主要介绍了解决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;

执行成功后,两个表之间的外键约束就解除了,此时删除表就可以了

dDROP TABLE tb_drop;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SQL中row_number() over(partition by)的用法说明

    SQL中row_number() over(partition by)的用法说明

    这篇文章主要介绍了SQL中row_number() over(partition by)的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Mysql添加外键的两种方式详解

    Mysql添加外键的两种方式详解

    外键可以保持数据一致性,完整性,主要目的是控制存储在外键表中的数据,下面这篇文章主要给大家介绍了关于Mysql添加外键的两种方式,需要的朋友可以参考下
    2023-04-04
  • Linux下彻底删除Mysql 8.0服务的方法

    Linux下彻底删除Mysql 8.0服务的方法

    这篇文章主要介绍了Linux下彻底删除Mysql 8.0服务的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • MySQL字符串截取的核心要点和注意事项

    MySQL字符串截取的核心要点和注意事项

    这篇文章主要介绍了MySQL字符串截取的核心要点和注意事项,substr函数在数据处理中有着广泛的应用,从日志分析、数据报告生成到复杂的数据清洗和处理流程中,substr都能大显身手,需要的朋友可以参考下
    2025-08-08
  • mysql 5.5.27 winx64安装配置方法图文教程

    mysql 5.5.27 winx64安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql5.5.27 winx64安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 在同一Linux下安装两个版本的MySQL的流程步骤

    在同一Linux下安装两个版本的MySQL的流程步骤

    打工人奉旨制作数据库服务的虚拟机模板,模板中包含各种数据库,其中mysql需要具备5.7及8.0两个版本,并保证服务能正常同时使用,所以本文给小编介绍了在同一Linux下安装两个版本的MySQL的流程步骤,需要的朋友可以参考下
    2024-03-03
  • PHP学习散记 2012_01_07(MySQL)

    PHP学习散记 2012_01_07(MySQL)

    数据库是Web大多数应用开发的基础。如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分
    2012-01-01
  • MySQL中数据类型相关的优化办法

    MySQL中数据类型相关的优化办法

    这篇文章主要介绍了MySQL中数据类型相关的优化办法,包括使用多列索引等相关的优化方法,需要的朋友可以参考下
    2015-07-07
  • MySQL索引优化指南之如何科学为数据表添加索引

    MySQL索引优化指南之如何科学为数据表添加索引

    在数据库优化中,索引(Index)是最常用的性能优化手段之一,正确的索引可以大幅提升查询速度,本文小编就来和大家讲讲如何为数据表科学添加索引吧
    2025-05-05
  • 通过实例认识MySQL中前缀索引的用法

    通过实例认识MySQL中前缀索引的用法

    这篇文章主要通过实例来介绍MySQL中的前缀索引,包括前缀在实际使用中需要考虑到的长度问题等,需要的朋友可以参考下
    2015-05-05

最新评论