MySQL Workbench报ERROR 1215:无法添加外键约束,非常见属性主键问题
解决ERROR 1215无法添加外键的隐藏原因
我明白你已经排查了大家常说的字段类型不匹配、主键设置问题,但还是卡在ERROR 1215上了——咱们来看看几个容易被忽略的排查方向:
确认两张表的存储引擎一致
InnoDB是MySQL中唯一支持外键约束的存储引擎,如果Carteira或Acionistas其中一张用了MyISAM(或其他不支持外键的引擎),就会触发这个错误。你可以用下面的命令检查:SHOW CREATE TABLE acoes_db.Carteira; SHOW CREATE TABLE acoes_db.Acionistas;看输出里的
Engine字段,确保两者都是InnoDB。检查字段的符号属性是否匹配
虽然你说都是INT(11)类型,但要注意是否是有符号(SIGNED)或无符号(UNSIGNED)——哪怕显示宽度都是11,只要符号属性不一样,外键就无法创建。用这个命令看细节:DESCRIBE acoes_db.Carteira; DESCRIBE acoes_db.Acionistas;查看
Type列,比如是int(11)还是int(11) unsigned,必须完全一致。验证表的字符集和排序规则统一
两张表的字符集或排序规则不同,也可能导致外键创建失败。你可以用以下命令检查:SHOW TABLE STATUS FROM acoes_db LIKE 'Carteira'; SHOW TABLE STATUS FROM acoes_db LIKE 'Acionistas';确认
Collation字段的值完全相同。排查索引是否正常存在
虽然Acionistas的Carteira是主键(默认自带主键索引),但如果主键约束被意外移除过(哪怕之后重新添加,也可能有索引异常),可以用下面的命令确认索引存在:SHOW INDEX FROM acoes_db.Acionistas;确保
Carteira字段在Key_name为PRIMARY的索引里。
如果以上所有检查都没问题,你可以尝试修复表或者重启MySQL服务:
-- 修复表(仅InnoDB可用) REPAIR TABLE acoes_db.Carteira; REPAIR TABLE acoes_db.Acionistas;
内容的提问来源于stack exchange,提问作者Acauã Pitta
相关产品推荐
相关产品推荐

