MySQL外键无法创建(索引问题?)

5

我在创建一些外键时遇到了一些问题......
当我尝试在MySQL Workbench中定义外键时,出现了以下消息:

必须为所选列“playerName”创建索引并具有兼容的类型,才能创建外键。

这时我的问题开始了:我很确定,该列(towns.playerName)已经被索引,并且它绝对是相同类型(VARCHAR(255))...
‘towns’的索引
我想从players.name(主键,非空,唯一)towns.playersName(非空)添加一个外键。
那么我该怎么做才能创建外键呢?
似乎我做错了什么...

PS:如果已经有关于此问题的问题,请原谅我......

编辑:我刚刚再次尝试(与之前几次完全相同),现在它可以工作了......真奇怪
也许是MySQL Workbench的一个错误吗?


towns.playersName 也必须有一个索引。新版的 MySQL 会自动创建必要的索引,但在旧版本中,您必须自己为外键使用的字段创建索引。 - Marc B
towns.playerName被索引了...也许不是很清楚;问题已经编辑过了。 - Sa'Kagé
尝试以相反的方式创建外键。约束/外键必须在没有唯一索引的表上。请查看此帖子以获取示例。https://dev59.com/G2Ml5IYBdhLWcg3wc21p 此外,如果您发布更多SQL,则可能会很有用。 - jornare
3个回答

6
我曾多次遇到相同的问题,但最终发现一个有趣且实用的概念,在学习mysql时我错过了它。如果表1中的一列不是“键”,则除非该列具有索引,否则无法将其添加为外键。因此,我使该列成为一个索引列。
例如:
CREATE INDEX any_name ON table1 (column1);

最终,我成功解决了我的问题。


0
我曾经遇到过类似的错误信息。我检查了两个表中列的类型,其中一个表的列是int类型,而另一个表的列是varchar类型。在两个表中使用相同的类型之后,它就可以正常工作了。

0

我相信你试图通过外键访问的关键字需要是另一张表中的主键。


即使非主键也可以作为外键引用,但是它们必须被索引。 - learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接