我无法选择列来指定外键

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

我想做的事情很简单。选择一列(我的外键),然后指定引用的列。 但MySql工作台似乎有一个错误。我无法选择我的外键。有谁知道如何解决这个问题吗?

 My sql bug print screen here

Mysql版本> 8.0.12

mysql mysql-workbench
2个回答
0
投票

有谁知道如何解决这个问题吗?

一般规则是两列必须具有相同的类型,并且引用的列必须被索引(例如主键)。

如果您分享两张桌子的

SHOW CREATE TABLE <table>
,我可以提供更多信息。

以下是官方文档中的所有要求列表:

父表和子表必须使用相同的存储引擎,并且它们 不能定义为临时表。

创建外键约束至少需要 SELECT、 父表上的 INSERT、UPDATE、DELETE 或 REFERENCES 权限 截至22年6月5日。

外键和引用键中的对应列必须 具有相似的数据类型。整数类型的大小和符号必须是 相同。字符串类型的长度不必相同。为了 非二进制(字符)字符串列、字符集和排序规则 一定是一样的。

MySQL 支持一列与另一列之间的外键引用 在一个表内。 (列不能有外键引用 )在这些情况下,“子表记录”指的是依赖项 记录在同一个表中。

MySQL 需要外键和引用键上的索引,以便 外键检查可以很快并且不需要表扫描。在里面 引用表,必须有一个索引,其中外键 列按相同顺序列为第一列。这样一个 如果引用表没有索引,则会自动在引用表上创建索引 存在。如果您创建,此索引可能会在稍后被静默删除 另一个可用于强制外键约束的索引。 index_name(如果给定)将按前面所述使用。

InnoDB 允许外键引用任何索引列或索引组 列。但是引用的表中必须有索引 其中引用的列是相同顺序的第一列。 InnoDB 添加到索引的隐藏列也被考虑在内(请参见 第 14.6.2.1 节“聚集索引和二级索引”)。

NDB 要求任何列上有显式唯一键(或主键) 作为外键引用。 InnoDB 没有,它是 标准 SQL。

不支持外键列上的索引前缀。最后, BLOB 和 TEXT 列不能包含在外键中,因为 这些列上的索引必须始终包含前缀长度。

InnoDB 目前不支持以下表的外键: 用户定义的分区。这包括父表和子表。

此限制不适用于按以下方式分区的 NDB 表 KEY 或 LINEAR KEY(唯一支持的用户分区类型 NDB存储引擎);这些可能有外键引用或者是 此类参考的目标。

外键关系中的表不能更改为使用另一个表 存储引擎。要更改存储引擎,您必须删除任何 首先是外键约束。


0
投票

我对 MySQL Workbench 8.0.36 也有同样的问题。两个表的引擎都是 InnoDB,我引用 PK INT 列,并且我首先在引用列上创建索引。不管有没有这个索引,它都不起作用。看起来像是一个错误。

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