MySQL创建City表报Foreign key constraint is incorrectly formed错误怎么解决
问题原因
- 创建City表定义外键时,引用State表没有指定所属的
mydbschema,MySQL无法正确定位到已创建的mydb.State表,因此触发外键格式错误。 - 你提前关闭的外键检查仅跳过外键关联数据的存在性校验,不会跳过外键关联的表/字段存在性、属性一致性校验。
修复方案
将City表外键定义部分的REFERENCES State (StateId)修改为REFERENCES mydb.State (StateId)即可,保持和State表关联Country表的引用格式一致。
修正后完整的City表建表语句
DROP TABLE IF EXISTS `mydb`.`City` ; CREATE TABLE IF NOT EXISTS `mydb`.`City` ( `CityId` SMALLINT NOT NULL, `CityName` VARCHAR(45) NULL, StateId SMALLINT NOT NULL, PRIMARY KEY (CityId), INDEX `fk_City_State1_idx` (StateId ASC), CONSTRAINT `fk_City_State1` FOREIGN KEY (StateId) REFERENCES `mydb`.`State` (`StateId`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
其他可能触发该报错的常见场景
- 外键字段和被引用的主键/唯一键字段的类型、长度、字符集、排序规则不一致
- 被引用的表/字段不存在,或者名称拼写错误
- 被引用的字段不是主键或者未设置唯一索引
内容的提问来源于stack exchange,提问作者Satyaki Dasgupta
相关产品推荐
相关产品推荐

