35

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

WB截图

4

13 回答 13

53

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

于 2015-03-03T12:28:44.863 回答
10

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

就我而言,一个是

表默认(使用utf8通用)

另一个与

utf8_unicode_ci

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

于 2016-09-22T11:30:27.677 回答
9

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

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

于 2013-08-17T05:22:48.680 回答
2

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

例子:

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;
于 2019-01-22T14:55:17.240 回答
1

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

于 2012-06-23T20:38:08.653 回答
1

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

于 2012-06-24T01:19:23.493 回答
1

外键应具有与主键类似的相同常量。你可以忽略AI,Primary Key。如果 Primary key 有 UI , foreign 也应该有 UI

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

于 2016-12-18T21:05:54.697 回答
0

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

例如,我的 FK 列排序规则是 'utf8',我也将我的引用表更改为 'utf8'。它解决了我的问题。

我希望它会有所帮助。

于 2016-12-22T04:18:56.137 回答
0

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

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

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

于 2017-01-26T06:53:32.473 回答
0

确保两个表中的数据类型相同,就好像一张表说int的那样,另一张表int(6)说它不会工作,因为一个表有限制。我遇到了这个问题,这就是我解决它的方法。

于 2018-08-16T14:20:18.760 回答
0

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

奇怪的

于 2019-12-23T15:02:38.977 回答
0

即使从表属性我没有设法改变foreign key值,我尝试使用SQL代码并且我做到了。

代码:

ALTER TABLE Table2
ADD FOREIGN KEY (Table2_fk_field) REFERENCES Table1(Table1_pk_field);
于 2020-02-05T15:04:10.097 回答
0

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

于 2021-02-09T19:17:55.547 回答