开发者社区> 问答> 正文

Mysql数据库创建外键报错

用RDS登录MySQL数据库,对一张表建立外键后,数据都可以输入删除,但是无法进入编辑数据表结构页面,报错显示:Error occur in query meta info. Caused by: Failed to load meta foreign key info from DB: Unknown table 'INNODB_SYS_FOREIGN' in information_schema

展开
收起
7tc6vipbfelkg 2020-05-30 23:23:24 684 0
1 条回答
写回答
取消 提交回答
  • 一种:外键的字段与关联的字段的类型不匹配(包括编码格式的不匹配):

    两个不同的表格(一个是record(借书记录表),一个是reader(读者信息表)):然后关联的两个readerid 字段要保持一致,包括长度,类型要保持一致。

    然后是编码格式

    两个表的引擎,字符集要保持一致,这样才能关联成功;

    另外,若读者对表的设计有unsign与sign的设定,要注意设定的外键的字段与关联的字段也要保持一致。

    第二种情况:外键的名字是一个已经存在的键值,要保证名字的唯一,如下:

    一般创建外键名字的时候是用 表名+FK+数字来区别于其他外键 ,如上表是record表,创建的外键名字是recordFK1,recordFK2等等.

    可以尝试,在外键名字后面加几个数字判断是否是这个引起的错误。

    第三种情况:mysql引擎引起的外键创建不能保存或者不能发挥作用的情况,mysql一般的默认引擎是myisam,而myisam是不能创建外键的。

    具体的判断方法以及问题处理方法大家可以去博主的另外一篇博客查看:mysql创建外键无法保存的原因及处理

    第四种情况:试图创建的一个外键没有建立起索引,或者不是一个primary key 并且如果其中不是一个primary key,你必须为他创建一个索引。

    第五种情况:外键的动作设置成on delete set null 或者 on update set null,但是在关联的表的字段又设置的no null,导致冲突:

    (这张表是正确操作)

    而错误操作是, 外键设定了 当admin的 username更新时,这张表(traffic)会跟着把关联的字段设为null

    而在traffic这张表的对应 username字段(本来应该null的),但是却设定了 不允许为空,引起的冲突。

    解决方法:设置为CASCADE级联更新,或者修改为允许为空。

    第六种情况:在navicat设定的表格主键中 有 主键1,主键2,主键3,的区别,主键1不能被级联更新(删除)(CASCADE)

    2021-02-22 19:58:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像