无法设置外键关系

问题描述 投票:0回答:14

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

Screenshot of WB

mysql-workbench
14个回答
62
投票

我知道这很旧,但通常的罪魁祸首是

Non Null
旗帜和
Unsigned
。如果引用的列确实启用了它们,请确保在外键列上匹配它们。


11
投票

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

就我而言,其中一个是

表格默认(一般使用utf8)

另一个带有

utf8_unicode_ci

我已经使用 utf8_unicode_ci 设置了这两列,它可以工作。


9
投票

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

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


4
投票

在接受的答案中,手动更正的意思是: 首先为引用表中的引用键创建索引。 (您可以在每个表的索引选项卡中执行此操作)。 然后,单击“应用”后(即使没有选择引用的列),相应地更改“应用”中的代码。

示例:

ALTER TABLE `SCHEMA_NAME`.`SECOND_TABLE_NAME` (we are creating foreign key in this second table)
ADD CONSTRAINT `FOREIGN_KEY_NAME`
  FOREIGN KEY (`COLUMN_IN_SECOND_TABLE`)
  REFERENCES `SCHEMA_NAME`.`FIRST_TABLE_NAME` (`COLUMN_IN_FIRST_TABLE`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;

4
投票

即使从表属性中我还没有设法更改

foreign key
值,我尝试使用
SQL
代码并且做到了。

代码:

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

2
投票

id_familjer 是主键吗?设置一下。
引用列仅显示 familjer 表主键。


1
投票

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


1
投票

外键应该具有与主键相同的常量。你可以忽略AI,主键。 如果主键有UI,那么外键也应该有UI

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


0
投票

就我而言,我更改了要设置外键的每一列中的“排序规则”。

例如,我的 FK 列排序规则是“utf8”,我也将参考表更改为“utf8”。它解决了我的问题。

希望对您有帮助。


0
投票

另外补充一点,如果您在同一数据库命名空间中制作 EER 图,并且两个或多个图包含同名的表,也会发生这种情况。

因此,如果您尝试与表建立关系(该表也存在于同名的另一个图表中),它将在引用表中显示两次,两者都引用您当前的图表模式,并且它不允许您设置关系。

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


0
投票

确保两个表中的数据类型相同,就好像一个表说

int
而另一个表说
int(6)
一样,它不会起作用,因为一个表有限制。我遇到了这个问题,这就是我解决它的方法。


0
投票

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

奇怪


0
投票

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


0
投票

我发现了! 如果您引用的表包含 JSON 字段,则会阻止从该表中选择列作为外键! workaround 我将这些字段切换为文本,突然它就起作用了!

© www.soinside.com 2019 - 2024. All rights reserved.