超详细!Mysql错误1452 - Cannot add or update a child row: a foreign key constraint fails 原因及解决方法


Caused by: com.mysql.jdbc.exceptions.jdbc4.
MySQLIntegrityConstraintViolationException: 
Cannot add or update a child row: a foreign
 key constraint fails (`数据库`.`表名`, 
CONSTRAINT `FK_Reference_13` FOREIGN KEY (`user_id`) 
REFERENCES `user_info` (`id`))
at sun.reflect.GeneratedConstructorAccessor438.newInstance(Unknown Source)

译文:

d00ab095b62958c007005445cfb8de4.png

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


原因一:

添加的外键列与另一个表的唯一索引列(一般是主键)的数据类型不同

原因二:
要添加外键的表类型与另一个表的存储引擎是不是都为 innodb引擎
#查看表引擎
方法1:

show create table 表名;

方法2:

show table status from 数据库 where name=‘表名’;

方法3:

use information_schema;
select table_catalog,table_schema,table_name,engine from tables
where table_schema=‘数据库名’ and table_name=‘表名’;

原因三:
设置的外键与另一个表中的唯一索引列(一般是主键)中的值不匹配
#解决办法:删除要成为外键的列,再次创建并默认为NULL

原因四:

如果两个表的相关列已经有数据了,如果但是数据不匹配的话,要把不匹配的数据删除后才能添加外键成功

解决办法:把不匹配的数据删除

Mysql错误1452 - Cannot add or update a child row: a foreign key constraint fails 原因及解决方法
报错的原因大概分为三种
MySQL数据库:Can not connect to MySQL server 解决方法
MySQL数据库:Can not connect to MySQL server 解决方法
mysql 表名和和数据库函数名称冲突的解决方法
好久没写blog了,今天刚考完网络后面还有一大段时间没考试可以学点技术了。但是,今天晚上被mysql卡了一晚上,,,因为我的表有一个叫show,因为我很少使用show这个函数。
mysql操作中 出现You can‘t specify target table for update in FROM clause错误的解决方法
这个错误实际上也不能称之为咱们sql语句写的不行,实际上是我们在一些细节上没有遵循mysql的语法规范。 问题所在:我们一个sql语句中先select这个表,然后再update这个表的内容。 错误示范: UPDATE StuCose SET Grade=60 WHERE Sno IN( SELECT Sno FROM stucose WHERE Grade<=ALL( SELECT MIN(Grade) FROM stucos
mysql中出现Unit mysql.service could not be found 的解决方法
mysql中出现Unit mysql.service could not be found 的解决方法
MySQL 数据库sql语句用关键字作为where条件进行筛选实例演示,mysql建表、查询字段为关键字解决方法
MySQL 数据库sql语句用关键字作为where条件进行筛选实例演示,mysql建表、查询字段为关键字解决方法
MySQL 语法问题:You can‘t specify target table ‘xxx‘ for update in FROM clause. 原因及解决方法
MySQL 语法问题:You can‘t specify target table ‘xxx‘ for update in FROM clause. 原因及解决方法
MySql提示服务已经启动成功但又提示can’t connect to MySQL server解决方法,mysql服务自动停止处理方法
MySql提示服务已经启动成功但又提示can’t connect to MySQL server解决方法,mysql服务自动停止处理方法
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
navicat连接mysql报错1251的解决方法1、新安装的mysql8,使用破解版的navicat连接的时候一直报错,如图所示: 2、网上查找原因发现是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 由于用的是破解版的navicat,所以只能用第二种方法解决了; 3、首先以管理员身份运行cmd,然后使用命令进入mysql。