首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[转] Mysql创建外键失败原因总结

[转] Mysql创建外键失败原因总结

作者头像
无道
发布2019-11-13 15:35:17
发布2019-11-13 15:35:17
6.5K0
举报
文章被收录于专栏:无道编程无道编程

是不是遇到下图所示的错误呢?

原因一

你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOT NULL值。你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。

原因二

两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配。

原因三

试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。如果其中一个不是primary key的话,你必须先为它创建一个索引。

原因四

其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。

原因五

外键的名字不能重复。你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

原因六

请确定你的Charset和Collate选项在表级和字段级上的一致。

原因七

你可能设置为外键设置了一个默认值,如default=0。

原因八

ALTER声明中有语法错误。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档