无法创建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);