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

MySQL创建report表报错errno:150 外键约束格式错误原因排查

为什么创建report表时会触发外键约束错误(errno:150)?

这个错误我太熟了——MySQL的errno 150本质就是外键约束的定义不符合规则,我帮你拆解几个最常见的原因:

  • 关联列的数据类型/属性完全不匹配
    外键列和它要关联的patient_info表的主键列必须是完全一致的类型,包括数据类型、长度、是否无符号这些细节。比如如果patient_info的主键是INT UNSIGNED,但report里的外键列写成了INT(没有UNSIGNED),或者主键是VARCHAR(20),外键列是VARCHAR(30),都会触发这个错误。

  • 关联的列不是主键或唯一约束
    外键必须指向另一张表的PRIMARY KEY或者带有UNIQUE约束的列,不能是普通的非唯一列。比如你如果把report的外键关联到patient_info的一个普通列(没有加主键或唯一约束),MySQL会直接拒绝创建外键。

  • 两张表的字符集/排序规则不一致
    如果patient_info和report的字符集或者排序规则不一样(比如一张用utf8mb4_general_ci,另一张用utf8_general_ci),即使列类型匹配,外键约束也会创建失败。MySQL要求关联表的字符集和排序规则必须一致。

  • 关联的表名/列名拼写错误
    别小看这个低级错误!如果在report的外键定义里,把patient_info写成了patientinfo,或者把主键列名patient_id写成了patientid,MySQL找不到对应的表或列,也会抛出这个错误。

  • 使用了不支持外键的存储引擎
    只有InnoDB引擎支持外键约束,如果你的report表用了MyISAM或者MEMORY这类不支持外键的引擎,创建外键时肯定会失败。现在MySQL默认是InnoDB,但如果手动指定了其他引擎,就会出问题。

内容的提问来源于stack exchange,提问作者Chathura Yapa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:02