HeidiSQL添加外键报错1215且无超级用户权限无法排查问题求助
MySQL 1215外键创建错误排查解决步骤
- 先校验关联字段属性完全一致
主表Con的ConID和子表ConEvent的ConID必须保证数据类型、长度、是否无符号(unsigned)、是否可空等属性完全匹配,你当前的建表语句里属性是匹配的,但要确认后续没有修改过字段属性,可执行以下语句核对:DESC Con; DESC ConEvent; - 清理子表中的不匹配脏数据
如果ConEvent中存在ConID的值没有在Con表的ConID里出现过,会导致外键创建失败,执行以下语句查询异常数据:
查询出的异常数据需要先修正或删除,再尝试创建外键。SELECT ConID FROM ConEvent WHERE ConID NOT IN (SELECT ConID FROM Con); - 确认引用字段存在有效索引
外键引用的主表字段必须是主键或者有唯一索引,你当前语句里ConID是Con表的主键,符合要求,可执行以下语句确认:SHOW INDEX FROM Con; - 避免外键名冲突,显式指定唯一外键名创建
如果之前创建外键失败有残留约束,或者自动生成的外键名重复,可显式指定唯一外键名执行创建:ALTER TABLE ConEvent ADD CONSTRAINT `fk_con_event_conid` FOREIGN KEY (`ConID`) REFERENCES `Con`(`ConID`); - 核对表名大小写匹配
Linux环境下MySQL默认区分表名大小写,执行SHOW TABLES;确认实际表名的拼写、大小写和你语句中的Con、ConEvent完全一致。 - 确认两张表存储引擎都是InnoDB
MyISAM引擎不支持外键,你当前建表语句指定了InnoDB,可执行以下语句再次确认:SHOW CREATE TABLE Con; SHOW CREATE TABLE ConEvent;
内容的提问来源于stack exchange,提问作者SageLeader
相关产品推荐
相关产品推荐

