MySQL设置外键报错 #1452 - Cannot add or update a child row: a foreign key constraint fails 解决方法

  MySQL数据库,当我尝试在A表中设置B表的主键为外键时,报出错误:#1452 - Cannot add or update a child row: a foreign key constraint fails 

  

  于是去搜索了一下 "#1452 - Cannot add or update a child row: a foreign key constraint fails" 的含义与解决方法,根据这篇博文去排查了报错原因,排除了可能1和可能2,然后去研究可能3的具体含义,一开始并没有理解“值不匹配”的含义,只是直觉性地去检查了一下目标字段在两个表中的值,发现A表中有一行数据该字段的值在B表中已经删除了,这就导致了所谓的“值不匹配”的问题,然后手动删除了A表中的该条废弃数据,再次设置外键就成功了。

  最后贴一下参考的原文,原文链接:https://blog.csdn.net/weixin_43713105/article/details/89396870

报错的原因大概分为三种:

  原因一:

    添加的外键列与另一个表的唯一索引列(一般是主键)的数据类型不同
  原因二:
    要添加外键的表类型与另一个表的存储引擎是不是都为innodb引擎
    #查看表引擎
      法一: show create table 表名;
      法二:show table status from 数据库 where name=‘表名’;
      法三:use information_schema;
         select table_catalog,table_schema,table_name,engine from tables
         where table_schema=‘数据库名’ and table_name=‘表名’;
  原因三:
    设置的外键与另一个表中的唯一索引列(一般是主键)中的值不匹配
    #解决办法:删除要成为外键的列,再次创建并默认为NULL

原文地址:https://www.cnblogs.com/duoge/p/12540421.html

时间: 2024-10-23 23:53:58

MySQL设置外键报错 #1452 - Cannot add or update a child row: a foreign key constraint fails 解决方法的相关文章

数据库添加数据报错:Cannot add or update a child row: a foreign key constraint fails

在更新表数据时出现了以下报错信息:Cannot add or update a child row: a foreign key constraint fails (o2o.tb_shop, CONSTRAINT fk_shop_profile FOREIGN KEY (owner_id) REFERENCES tb_person_info (user_id)) 也就是说tb_shop表中的涉及到的外键是fk_shop_profile,表tb_shop中的列owner_id和表tb_person

ERROR 1452 : Cannot add or update a child row: a foreign key constraint fails

MySQL添加外键失败  error 1452解决办法 举例: 两个表       用户表:user   班级表:  grade 用户表中每个用户对应一个班级ID,即gradeId 即:user表的主关键字gradeId是grade表中的Id user表称为主表   grade表称为从表 [sql] alter table user add foreign key (gradeId) references grade(Id ); [error] [原因] user表中的有的gradeId不属于g

hibernate4一对多关联多方多写一次外键导致无法创建java.lang.NullPointerException以及Cannot add or update a child row: a foreign key constraint fails

一篇文章里边有多张图片,典型的单向一对多关系 多方 当程序运行到这一句的时候必然报错 但是参考书也是这样写的 其中em是 EntityManager em = JPA.createEntityManager(); 我本就是为了省事儿,采用的hibernate,结果你又让我用JPA这不是扯淡吗???/ 经过两天的无脑研究 我发现一对多的情况,如果一方来控制,那么多方不能在实体中创建外键 也就是说,要这样做 /* * To change this license header, choose Lic

Mysql之1451 - Cannot delete or update a parent row: a foreign key constraint fails...解决办法记录

今天使用delete语句删除一张表中的一条信息时,提示了这么一个错误:1451 - Cannot delete or update a parent row: a foreign key constraint fails...错误代码为1451 在这里参考了一位园友的解决方案mysql删除外链解决办法,如下: 关闭外键约束 SET FOREIGN_KEY_CHECKS=0; 语句执行 DELETE FROM blog_blog WHERE blog_blog.id=91; 删除完成后,重新开启外

MySQL主从复制中断,报“Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217” 错误

前几天,发现从库挂了,具体报错信息如下: 分析思路 1. 因为我采用的是选择性复制,只针对以下几个库进行复制: card,upay,deal,monitor,collect.所以,不太可能出现对于sas_basic的操作能复制到该从库上. 2. 整个架构是1主2从,且都是选择性复制,上面这个从库是直接复制card,upay,deal,monitor,collect这几个数据库的数据,而另外一个从库则是忽略上述库,如下所示: 怀疑是在上述schema下,执行了DROP TABLE IF EXIST

关于mysql中[Err] 1451 -Cannot delete or update a parent row: a foreign key constraint fails

今天在弄mysql的时候突然出现一条这个错误信息,当时就蒙逼了,不过仔细观察一番后发现是外键的原因,这是由于在删除表的时候存在外键关联这时候就会出现删除错误,我们可以暂时把mysq数据库的外键约束给关闭掉,具体方法请看如下: [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint fails SET FOREIGN_KEY_CHECKS = 0 //关闭外键约束 进行完操作后别忘记了再把外键约束重新打开

MySQL:ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

MySQL在删除一张表时出现 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS = 0; 然后就可以删除表了. 删除完成后设置 SET FOREIGN_KEY_CHE

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

这可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS = 0; 删除完成后设置 SET FOREIGN_KEY_CHECKS = 1; 其他: 关闭唯一性校验 set unique_checks=0; set unique_checks=1;

MYSQL 添加外键报错

2014年6月16日 10:48:51 出错的部分提示摘录: #1452 - Cannot add or update a child row: a foreign key constraint fails result 2 when explaining filename '#sql-3d5_204369' 解决办法: pma 中同时执行两条语句: set foreign_key_checks = 0; ALTER TABLE `table_name` ADD CONSTRAINT `fk_n