You need to enable JavaScript to run this app. 通过PHP单次创建customer_data与order_data表外键150错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

通过PHP单次创建customer_data与order_data表外键150错误如何解决

问题解决方法

错误原因

这个报错核心是外键字段与被引用的主键字段属性不匹配:
customers_data表的主键id定义为int(20) UNSIGNED(无符号整数类型),但order_data表中用于关联的cus_id字段定义为int(20)(普通有符号整数类型),二者属性不一致,导致外键约束无法创建。

修复方案

修改order_data表的cus_id字段属性,和被引用的customers_data.id保持完全一致,增加UNSIGNED属性即可。

修正后的order_data建表语句

CREATE TABLE IF NOT EXISTS order_data (
 id int(20) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
 cus_id int(20) UNSIGNED NOT NULL, 
 ITEM varchar(255) NOT NULL, 
 HSN varchar(50) NOT NULL, 
 QTY int(15) NOT NULL,
 RATE decimal(40,2) NOT NULL, 
 S_C_GST decimal(30,2) NOT NULL, 
 TOTAL decimal(50,2) NOT NULL,
 _DATE timestamp NOT NULL DEFAULT current_timestamp(),
 FOREIGN KEY(cus_id) REFERENCES customers_data(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

PHP单次执行多SQL注意事项

  • 确保建表顺序为先创建customers_data,再创建order_data,依赖表必须先存在才能创建外键约束
  • 若使用mysqli扩展执行多段SQL,需要调用mysqli_multi_query()方法,不能用普通的mysqli_query()
  • 若使用PDO扩展执行多段SQL,需要在连接配置中开启PDO::MYSQL_ATTR_MULTI_STATEMENTS参数

其他排查点(若修改类型后仍报错可检查)

  • 两张表的存储引擎必须都为InnoDB,MyISAM不支持外键
  • 两张表的字符集、排序规则必须一致
  • 被引用的customers_data.id必须是主键或唯一索引,当前配置已满足要求

内容的提问来源于stack exchange,提问作者it's my world

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:45:08