我对 MySQL Workbench 有一些问题,因为我有时在创建表时无法设置外键。我说有时因为它并不总是这样。问题是当我输入 FK 并选择参考表时,我无法选择参考列。我无法单击复选框并且下拉列表为空。我无法真正弄清楚问题是什么,因为我看不出与正在工作的 FK 没有真正的区别。我检查了数据类型、名称等,它们是正确的。我会提供一个SS来详细说明。绿色标记的键(id_hem)工作正常,红色标记是那些不工作的。
13 回答
我知道这很旧,但通常的罪魁祸首是Non Null
flag 和Unsigned
. 如果引用的列确实启用了它们,请确保在外键列上匹配它们。
这也可能是因为不同的排序规则。只需检查这 2 列是否具有相同的排序规则。
就我而言,一个是
表默认(使用utf8通用)
另一个与
utf8_unicode_ci
我已经用 utf8_unicode_ci 设置了这 2 列,它可以工作。
我有同样的问题..然后我检查了这两个表..问题是类型,它应该在两个表中都匹配。
如果在 foralda 表列id_familjer 是 (INT)
在 fkblixten 表列id_familjer 也应该是 (INT)。如果这两种数据类型不匹配,MySQL Workbench 将不允许选择该列作为外键。
在接受的答案中手动更正:首先为引用表中的引用键创建索引。(您可以在每个表的可用索引选项卡中执行此操作)。然后,单击应用后(即使没有选择引用的列)相应地更改应用中的代码。
例子:
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;
我遇到了同样的问题,问题出在外键索引中。MySQL 工作台有时会为 fk 索引生成太长的名称。手动校正有帮助。
id_familjer 是主键吗?设置它。
Referenced Column 仅显示 familjer 表主键。
外键应具有与主键类似的相同常量。你可以忽略AI,Primary Key。如果 Primary key 有 UI , foreign 也应该有 UI
UI-> 无符号整数 AI-> 自动增量
就我而言,我更改了要设置外键的每一列中的“排序规则”。
例如,我的 FK 列排序规则是 'utf8',我也将我的引用表更改为 'utf8'。它解决了我的问题。
我希望它会有所帮助。
另外补充一下我的两分钱,如果您在同一个数据库命名空间中制作 EER 图并且两个或多个图包含同名的表,也会发生这种情况。
因此,如果您尝试与一个表(也存在于另一个同名的图表中)建立关系,它将在参考表中显示为两次,两者都引用您当前的图表模式,并且不允许您设置一种关系。
解决方案是重命名另一个图中的表。
确保两个表中的数据类型相同,就好像一张表说int
的那样,另一张表int(6)
说它不会工作,因为一个表有限制。我遇到了这个问题,这就是我解决它的方法。
他们都没有工作......所以我自己编写了sql查询来设置外键。它没有任何问题。之后,我可以在右侧的“引用列”中选择属性(我在查询中使用)。
奇怪的
即使从表属性我没有设法改变foreign key
值,我尝试使用SQL
代码并且我做到了。
代码:
ALTER TABLE Table2
ADD FOREIGN KEY (Table2_fk_field) REFERENCES Table1(Table1_pk_field);
在我的例子中,使用现有数据设置约束,我忘记首先检查并删除子表中违反约束的行(在父表中找不到外键)!