MySQL外键设置失败求助:创建Invoices表遇errno:150约束错误
排查MySQL外键约束错误(Errno:150)的原因及解决办法
导致#1005 - 无法创建表table.Invoices (errno: 150 "Foreign key constraint is incorrectly formed")错误的核心原因是:
- 被引用字段未设置主键或唯一索引:你的
TermsCode表中,TermsCodeID仅标记了NOT NULL,但没有将其设为主键或添加唯一约束。MySQL要求外键引用的字段必须是被引用表的主键,或是带有唯一约束的字段,否则无法建立外键关联。
其他需要确认的点(你的代码中这些都没问题):
- 字段类型与长度完全匹配:
Invoices表的CustomerID(int)和Customers表的CustomersID(int)、Invoices的TermsCodeID(varchar(50))和TermsCode的TermsCodeID(varchar(50))类型一致,满足外键要求。 - 建表顺序正确:先创建被引用的
Customers和TermsCode表,再创建依赖它们的Invoices表,不会因被引用表不存在导致错误。
修正方案
修改TermsCode的建表语句,给TermsCodeID添加主键约束(推荐):
CREATE TABLE TermsCode ( TermsCodeID varchar(50) NOT NULL, Description varchar(50), PRIMARY KEY (TermsCodeID) );
如果不需要将TermsCodeID设为主键,也可以添加唯一索引:
CREATE TABLE TermsCode ( TermsCodeID varchar(50) NOT NULL, Description varchar(50), UNIQUE KEY (TermsCodeID) );
重新执行建表语句,即可成功创建Invoices表并建立外键约束。
内容的提问来源于stack exchange,提问作者frankyfrankers73
相关产品推荐
相关产品推荐

