【问题标题】:Can't set foreign key relationship无法设置外键关系
【发布时间】:2012-06-25 17:29:52
【问题描述】:

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

【问题讨论】:

  • 7年后问题依旧

标签: mysql-workbench


【解决方案1】:

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

【讨论】:

  • 这是我的问题。谢谢!已在主键上设置了 NN 和无符号,但在设置约束之前忘记了外键
  • 这就是我喜欢 SO 的原因。 3 年过去了,有人找出导致仍未修复的错误的原因并解决了它! TY
  • 另一个原因可能是不同的表排序规则。
  • 多么节省时间!
【解决方案2】:

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

在我的情况下,一个是

表格默认(使用utf8通用)

另一个有

utf8_unicode_ci

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

【讨论】:

    【解决方案3】:

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

    如果在 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;
      

      【讨论】:

      • 是的,脚本最终对我有用,创建一个脚本的最简单方法是创建一个新模型,重新创建所有有问题的表及其在其中的关系,然后最终让工作台生成脚本适合您使用正向工程(只需在审查脚本阶段停止并提取 SQL 并清除不必要的内容,因为它还会尝试创建模式和所有提到的表)。
      【解决方案5】:

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

      【讨论】:

      • 能否请您添加一些有关如何手动更正此问题的信息?
      • @s.Daniel 生成 SQL 脚本,然后在您喜欢的编辑器中手动更新过长的索引名称。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          在我的例子中,我更改了每一列中要设置外键的“排序规则”。

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

          希望对你有帮助。

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

                奇怪

                【讨论】:

                  【解决方案12】:

                  尽管我没有从表属性中更改 foreign key 值,但我尝试使用 SQL 代码并成功了。

                  代码:

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

                  【讨论】:

                    【解决方案13】:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2017-05-08
                      • 2013-02-24
                      • 2019-11-27
                      • 1970-01-01
                      • 2021-11-02
                      • 2018-10-25
                      • 2017-11-13
                      • 1970-01-01
                      相关资源
                      最近更新 更多