无法设置外键关系

时间:2012-06-23 20:30:49

标签: mysql-workbench

我对MySQL Workbench有一些问题,因为我在创建表时有时无法设置外键。我说有时因为它并不总是这样。问题是,当我输入FK并选择参考表时,我无法选择引用的列。我无法单击复选框,下拉列表为空。我无法弄清楚问题是什么,因为我认为FK的工作没有真正的区别。我检查了数据类型,名称等,它们是正确的。我将提供一个SS来详细说明。绿色标记键(id_hem)正常工作,红色标记表示不正常。

Screenshot of WB

13 个答案:

答案 0 :(得分:38)

我知道这是旧的,但通常的罪魁祸首是Non Null旗帜和Unsigned。如果引用的列确实已启用它们,请确保在外键列上匹配这些列。

答案 1 :(得分:8)

我有同样的问题..然后我检查了两个表..问题是类型,它应该在两个表中匹配。

如果在foralda表列中 id_familjer是(INT)
在fkblixten表列中 id_familjer也应该是(INT)。如果两个数据类型不匹配MySQL Workbench将不允许选择列作为外键。

答案 2 :(得分:5)

也可能因为不同的排序规则。只需检查这两列是否具有相同的排序规则。

在我的情况下,一个人在

  

表默认(使用utf8 general)

另一个

  

utf8_unicode_ci

我已经用utf8_unicode_ci设置了这两列,但它确实有效。

答案 3 :(得分:2)

我遇到了同样的问题,问题出在外键索引上。 MySQL工作台有时会为fk索引生成太长的名称。手动校正有帮助。

答案 4 :(得分:1)

id_familjer是主键吗?设置它。
Referenced Column仅显示familjer表主键。

答案 5 :(得分:1)

外键应具有与主键类似的相同常量。您可以忽略AI,主键。 如果主键具有UI,则外部也应具有UI

UI->无符号整数 AI->自动增量

答案 6 :(得分:0)

在我的情况下,我改变了#col;'在我想要设置外键的每一列中。

例如,我的FK列整理是' utf8',我也将我的参考表更改为' utf8'太。它解决了我的问题。

我希望它有所帮助。

答案 7 :(得分:0)

另外,为了增加我的两分钱,如果您在同一个数据库命名空间中制作EER图表,并且两个或多个图表包含一个具有相同名称的表格,也会发生这种情况。

因此,如果您尝试建立与表的关系(也存在于另一个具有相同名称的图中),它将在参考表中显示为两次,两者都引用您当前的图模式,并且它将不允许你要建立一种关系。

解决方案是重命名另一个图表中的表格。

答案 8 :(得分:0)

请确保两个表中的数据类型相同,就好像一个表述为int而另一个表述为int(6)一样,因为其中一个表有限制,所以它将不起作用。我遇到了这个问题,这就是我解决的方法。

答案 9 :(得分:0)

在已接受的答案中,在某种意义上是手动更正: 首先在引用表中为引用键创建一个索引。 (您可以在每个表格的索引标签中执行此操作)。 然后,在点击应用后(即使没有选择引用的列也是如此),相应地更改应用中的代码。

示例:

Utility    Location     ID       Name        Unit1      Mover1      Unit2    Mover2

500        Municipal    75       Glover      1A         GT          1A       GT                  
500        Municipal    75       Glover      2A         GT          2A       GT         
500        Municipal    75       Glover      3A         GT          3A       GT                       
.
.
51        Provincial    85       Toshi       1          CT          1B       CT           
51        Provincial    85       Toshi       2          CT          2B       CT              
51        Provincial    85       Toshi       5          ST          5B1      ST

答案 10 :(得分:0)

它们都不起作用...所以我自己编写了sql查询以设置外键。它没有任何问题。之后,可以在右侧的“引用列”中选择属性(在查询中使用了该属性)。

怪异

答案 11 :(得分:0)

即使从表属性中,我也没有设法更改foreign key的值,但是我尝试使用SQL代码,但确实做到了。

代码:

ALTER TABLE Table2
ADD FOREIGN KEY (Table2_fk_field) REFERENCES Table1(Table1_pk_field);

答案 12 :(得分:0)

在我的例子中,使用现有数据设置约束,我忘记先检查并删除子表中违反约束的行(在父表中找不到外键)!