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