我将MySQL数据库的备份导入到我的机器上(OS X 10.13.6),并运行以下脚本:
ALTER TABLE user_activity_data
ADD FOREIGN KEY (article_id) REFERENCES Article(id);
一切正常:已添加外键。
我在原始计算机(Debian GNU / Linux 8(jessie))上运行了相同脚本,该脚本失败并显示错误消息:
errno: 150
两列的类型完全相同:int(11)
这怎么可能?这是一个备份,因此它是相同的数据库。的确,这是MySQL的两个不同版本……但是它们显然应该兼容。
这是脚本失败的MySQL版本:
+-----------------+
| 5.5.60-0+deb8u1 |
+-----------------+
及其成功版本:
+-----------+
| 5.7.22 |
+-----------+
答案 0 :(得分:1)
您可能需要确保外键与主键的类型完全相同。
MySQL 5.5可能更宽容,而MySQL 5.7则更严格。考虑在两者上使用相同的版本。
答案 1 :(得分:1)
哦!找到了,但是很讨厌:(
看来,
因此,问题在于REFERENCES
子句的对象应该是article(id)
而不是Article(id)
。