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

无法创建MySQL外键(索引问题?),mysql,Mysql,我在做外键时有点问题… 当我尝试在MySQL Workbench中定义外键时,我得到以下消息: 选定列“playerName”必须编制索引,并且必须是兼容类型,才能创建外键 我的问题就从这里开始:我非常确定,列(towns.playerName)是索引的,并且它的类型肯定是相同的(VARCHAR(255))… 我想将外键从players.name(主键,非空,唯一)添加到towns.playersName(非空) 那么如何创建外键呢? 看来我做错了什么 PS:对不起,如果已经有问题了 编辑:我

我在做外键时有点问题…
当我尝试在MySQL Workbench中定义外键时,我得到以下消息:

选定列“playerName”必须编制索引,并且必须是兼容类型,才能创建外键

我的问题就从这里开始:我非常确定,列(towns.playerName)是索引的,并且它的类型肯定是相同的(VARCHAR(255))…

我想将外键从
players.name(主键,非空,唯一)
添加到
towns.playersName(非空)

那么如何创建外键呢?
看来我做错了什么

PS:对不起,如果已经有问题了

编辑:我刚刚再试了一次(和以前几次完全一样),现在它工作了。。。真奇怪

可能是MySQL Workbench中的一个bug???

我认为您试图通过外键访问的密钥需要是另一个表中的主键。

我收到了类似的错误消息。我检查了两个表中列的类型。在一个表中为
int
,而在另一个表中为
varchar
。这两种类型都应该是相同的。在两个表中使用相同的类型,效果很好。

我多次遇到相同的问题,但最终发现了一个有趣而有用的概念,这是我在学习mysql时错过的。 如果列不是表1中的“键”,则不能将其添加为外键,除非它应有索引。 因此,我将该列设为索引列

e、 g


最后,我终于解决了我的问题。

towns.playersName
上也必须有索引。较新的mysql版本会自动创建必要的索引,但在较旧的版本中,您必须自己为外键中使用的字段编制索引。
towns.playerName
已编制索引。。。也许不完全清楚;请尝试以相反的方式创建外键。约束/外键必须位于没有唯一索引的表上。查看这篇文章以获取一个示例。此外,如果您发布更多sql,它可能会很有用。这不是必需的。即使非主键也可以作为外键引用,但它们必须被索引。
CREATE INDEX any_name ON table1 (column1);