为何出现MySQL错误码150:外键约束格式错误?
错误码150(外键约束格式错误)的原因及解决办法
核心原因
你创建外键时违反了InnoDB的外键约束规则:外键所引用的字段必须是被关联表的主键,或是带有唯一约束的字段。
你的代码里:
company_properties表的外键pmcid,引用的是company_pmc表的pmcid字段- 但
company_pmc表的主键是id,pmcid只是普通的非空INT字段,既不是主键也没有唯一约束,不符合外键的创建要求,因此触发错误。
解决办法
有两种可行的修改方案:
方案1:给company_pmc的pmcid添加唯一约束
修改company_pmc的创建语句,为pmcid加上UNIQUE约束:
CREATE TABLE `company_pmc` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci', `pmcid` INT(11) NOT NULL UNIQUE, -- 添加唯一约束 PRIMARY KEY (`id`) USING BTREE ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB ;
方案2:将company_pmc的主键改为pmcid(业务逻辑允许的情况下)
如果pmcid本身是业务上的唯一标识,可直接将其设为主键:
CREATE TABLE `company_pmc` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL COLLATE 'latin1_swedish_ci', `pmcid` INT(11) NOT NULL, PRIMARY KEY (`pmcid`) USING BTREE, -- 设pmcid为主键 KEY `id` (`id`) -- 给原自增字段加普通索引(如需保留) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB ;
修改完成后再创建company_properties表,外键约束即可正常生效。
内容的提问来源于stack exchange,提问作者Dev Dev
相关产品推荐
相关产品推荐

