- 问题场景:MySQL两张表想要进行外键关联,sql语句正确,但出现上述错误
- 原因分析:
创建外键错误的原因大概有一下几个原因:
1、关联的两个字段的字段的类型不一致
2、设置外键删除时set null
3、两张表的引擎不一致 - 解决方式:
1、保证关联的两个字段的字段类型一致,当然字段约束不同时也不能创建成功,但报的不是这个错误
2、默认即可
3、查看两张表的引擎是否相同,有两种方式可以进行查看表的引擎
show table status from db_name where name='table_name';
这种方式根据查询的结果注意两个表的Engine字段的值即可
show create table table_name;
建表语句的最后一行会有engine=XX
查出表的引擎之后如果发现不同修改为相同即可,但是这是通常会出现另一个错误
1217 - Cannot delete or update a parent row: a foreign key constraint fails
这个错误出现的原因是mysql数据库设置了foreign key的关联属性导致无法删除或者更新数据
执行下面指令便可避免这个情况,但要记得执行完之后把变量改回1
set FOREIGN_KEY_CHECKS = 0
之后再执行增加外键语句就行了