zoukankan      html  css  js  c++  java
  • 更改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中试验。也仅在创建外键时会出错。具体原因也只是猜测,尚不明确出错机制

  • 相关阅读:
    操作系统学习五部曲
    由实模式进入保护模式
    extends && implements
    <mvc:annotation-driven>
    集合类关系
    Servlet8
    SprigMVC基础测试
    (转载)synchronized代码块
    jetty与tomcat
    输入输出流总结
  • 原文地址:https://www.cnblogs.com/SherlockVarious/p/14031158.html
Copyright © 2011-2022 走看看