MySQL外键约束错误(errno:150)问题求助
解决MySQL外键约束错误(errno: 150 "Foreign key constraint is incorrectly formed")
问题原因
- 建表顺序错误:创建
Members表时,它依赖的Trainers和Memberships表尚未存在。MySQL要求外键约束引用的目标表必须提前创建完成,且目标字段是该表的主键或唯一键。你的SQL执行顺序是先创建Members,之后才删除并重建Trainers和Memberships,导致外键约束无法找到合法的依赖对象,触发错误。
解决方法
调整表的删除和创建顺序:先删除依赖表Members,再删除被依赖的Trainers和Memberships;然后优先创建被依赖的Trainers和Memberships,最后创建Members表。
修正后的SQL代码:
-- 先删除依赖表,避免删除被依赖表时的约束冲突 DROP TABLE IF EXISTS Members; DROP TABLE IF EXISTS Trainers; DROP TABLE IF EXISTS Memberships; -- 先创建被依赖的表 CREATE TABLE Trainers ( trainerID INT NOT NULL AUTO_INCREMENT UNIQUE, firstName VARCHAR(45) NOT NULL, lastName VARCHAR(45) NOT NULL, specialization VARCHAR(100) NOT NULL, PRIMARY KEY(trainerID) ); CREATE TABLE Memberships ( membershipID VARCHAR(45) NOT NULL UNIQUE, price DECIMAL(19,2) NOT NULL, details VARCHAR(100) NOT NULL, PRIMARY KEY(membershipID) ); -- 最后创建依赖表,此时外键引用的表已存在 CREATE TABLE Members ( memberID INT NOT NULL AUTO_INCREMENT UNIQUE, lastName VARCHAR(45) NOT NULL, firstName VARCHAR(45) NOT NULL, phoneNumber VARCHAR(45) NOT NULL, email VARCHAR(100) NOT NULL, joinDate DATE NOT NULL, birthday DATE NOT NULL, membershipID VARCHAR(45) NOT NULL, trainerID INT NOT NULL, PRIMARY KEY(memberID), FOREIGN KEY(membershipID) REFERENCES Memberships(membershipID) ON DELETE CASCADE, FOREIGN KEY(trainerID) REFERENCES Trainers(trainerID) ON DELETE CASCADE );
额外验证点
你的外键字段与目标字段的数据类型、约束(唯一/主键)已经匹配,无需调整:
membershipID在Members和Memberships中都是VARCHAR(45) NOT NULL UNIQUE(且是主键)trainerID在Members和Trainers中都是INT NOT NULL(且是自增主键)
内容的提问来源于stack exchange,提问作者Justin Young
相关产品推荐
相关产品推荐

