原因
在 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
声明中有语法错误
总结
总之,出现外键创建错误时,仔细检查数据库表和字段的设计。建议尽量使用工具来设计和创建数据库,这样能减少出错的概率。