You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何出现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:30:51