更改mysql引擎后无法建立外键(navicat)

当我们使用navicat添加外键时,提示如下错误

 首先考虑以下原因:

1:两个字段的数据类型和长度不匹配:例如一个是int一个是bigint

2:外键所参考的字段必须为主键

3:要设置外键的字段不能为主键

4:mysql表的引擎必须得是 innodb(因为mysql默认引擎为MyISAM,但如果是这种情况的话,navicat不会报错,只会默默建立索引而不建立外键)

这些原因都排查完后,发现是引擎的问题,遂将引擎更改为innodb,但此时仍然无法建立外键,报错 1215 :cannot add foreign constraint 

注意:此时应将要建立的外键所涉及的字段重新输入一遍

  比如:blog_id和blog表下的id建立外键,都是int 10 类型的

  此时要将他们都先改成其他的,varchar 15之类的(随意改,只要跟原来不一样就行)

  再改回去  int 10

  再次尝试建立外键 ,即可添加成功

 改成

 再改回来

即可

 

合理推测是原来的字段数据是由MyISAM引擎创立的,更改了引擎后再建立外键会出错。所以重新更改一下字段信息,即变成由innodb创立的了。

目前只在navicat中出现这种情况,未在cmd中试验。也仅在创建外键时会出错。具体原因也只是猜测,尚不明确出错机制

原文地址:https://www.cnblogs.com/SherlockVarious/p/14031158.html