原因
在 Mysql 中创建外键时,经常会遇到问题而失败,这是因为 Mysql 中还有很多细节需要我们去留意,经过各种查阅资料,列出了以下几种常见原因。
-
两个字段的类型或者大小不严格匹配。例如,如果一个是
int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配。 -
试图设置外键的字段没有建立起索引,或者不是一个
primary key(主键)。如果其中一个不是primary key的话,必须先为它创建一个索引。 -
外键的名字不能重复,确保外健名字是唯一的。
-
你可能设置了
ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL。可通过修改cascade的属性值或者把字段属性设置成allow null来解决。(我遇到的就是这种情况) -
请确定你的
Charset和Collate选项在表级和字段级上的一致。 -
你可能设置为外键设置了一个默认值,如
default=0。 -
ALTER声明中有语法错误
总结
总之,出现外键创建错误时,仔细检查数据库表和字段的设计。建议尽量使用工具来设计和创建数据库,这样能减少出错的概率。