使用MySQL workbench添加不了外键

Mac 在用MySQLworkbench是为一个表添加外键时,为什么总选不上需要的被引用属性,我仔细看了属性的类型是相同的,字符集也都是utf-8,引擎也是InnoDB(操作系统-macos)

img

在 MySQL Workbench 创建表时添加外键,需要满足一些条件才能成功。如果 Mac 中选择某些属性时遇到了问题,可以尝试以下几个解决方案:

  1. 必须首先确保父表和子表使用的引擎都是 InnoDB,否则无法创建外键约束。可以通过以下查询语句来检查表使用的引擎:

    SHOW CREATE TABLE table_name;
    
  2. 确保需要引用的外键属性必须定义为主键或唯一键,否则无法引用。在 MySQL Workbench 中选择需要引用的属性之前,需要先将其定义为主键或唯一键。可以使用以下命令将属性定义为主键或唯一键:

    ALTER TABLE table_name ADD PRIMARY KEY (column_name);
    ALTER TABLE table_name ADD UNIQUE (column_name);
    
  3. 确保被引用的属性的数据类型必须与引用属性的数据类型相同。在 MySQL Workbench 中选择字段时,请确保所选的字段是与您要引用的字段具有相同数据类型的字段。

  4. 请注意,在添加外键时可能会遇到字符集不匹配的问题。因此,请确保相关表使用相同的字符集,并确保 MySQL Workbench 中的字符集配置与相关表的字符集一致。可以通过以下语句来检查和设置表的字符集和排序规则:

    SHOW CREATE TABLE table_name;
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

该回答引用GPTᴼᴾᴱᴺᴬᴵ
如果MySQL Workbench无法选择外键所需的被引用属性,可能有以下原因:

  1. 被引用的属性不存在或者类型不匹配。请检查被引用的表和属性是否存在,且类型与当前表的对应属性匹配。
  2. 被引用的表或属性没有建立索引。请确保被引用的表和属性已经建立了索引,因为MySQL要求外键引用的属性必须建立索引。
  3. 表的引擎不是InnoDB。请检查当前表的引擎是否为InnoDB,因为MySQL只有在使用InnoDB引擎时才支持外键。

如果以上三种情况都没有问题,您可以尝试重新连接数据库,或者重新打开MySQL Workbench。如果问题仍然存在,您可以尝试使用命令行方式添加外键,以确认问题是否在MySQL Workbench上。命令行方式添加外键的语法如下:

ALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (column_name) REFERENCES ref_table_name(ref_column_name);


其中,table_name是当前表的名称,column_name是当前表要作为外键的属性名称,fk_name是外键的名称,ref_table_name是被引用表的名称,ref_column_name是被引用表中对应属性的名称。

如果命令行方式添加外键也失败,可能是MySQL数据库版本的问题,您可以尝试更新MySQL版本或者重新安装MySQL。