MySQL无法添加外键约束

时间:2014-01-07 11:11:32

标签: mysql django django-models django-south database-migration

我在Django模型中添加了一个表'GameRatings',并使用South进行迁移。该表与一个名为“Game”的表有一对一的关系。

迁移失败,并显示以下错误消息:

  

2014-01-07 10:51:15,026](0.505)创建表   app_gameratingsmodelgame_id varchar(32)NOT NULL   PRIMARY KEY,averageRating双精度NOT NULL,numRatings   整数NOT NULL); ARGS = []

     

[2014-01-07 10:51:15,650](0.294)改变   表app_gameratingsmodel添加约束   game_id_refs_gameID_fe5d3728 FOREIGN KEY(game_id)参考   app_gamemodelgameID);; ARGS = []

     

致命错误 - 以下SQL查询失败:ALTER TABLE   app_gameratingsmodel添加约束   game_id_refs_gameID_fe5d3728   FOREIGN KEY(game_id)参考文献   app_gamemodelgameID);

     

错误是:(1822年,“未能成功   添加外键constaint。缺少约束索引   引用表中的'game_id_refs_gameID_fe5d3728'   'app_gamemodel'“)

我不明白MySQL在谈论什么索引。有人可以帮忙吗?

感谢。

3 个答案:

答案 0 :(得分:2)

当您尝试引用具有不同数据类型的两列时(例如,VARCHAR为INT或甚至INT为UINT!),通常会发生这种情况。我总是忘记检查Workbench中的无符号标记:)

答案 1 :(得分:1)

您可能对app_gamemodel.gameID没有UNIQUE约束。为了能够建立外键约束,数据库需要一个UNIQUE(或PRIMARY KEY,几乎相同)。

答案 2 :(得分:1)

好的,我想。事实证明,两个表的列之间存在字符集不匹配。

对于GameTable来说,charset是utf8,因为新版本是用charset latin创建的,因为那是DB的默认字符集。 :)