这是我的SQL脚本
CREATE TABLE tracks(
track_id int NOT NULL AUTO_INCREMENT,
account_id int,
track_name varchar(255),
track_path varchar(255),
track_art_path varchar(255),
track_desc text,
primary key(track_id),
FOREIGN KEY (account_id) REFERENCES accounts_profile(accnt_id)
)
我没有看到任何语法错误。一切都很好看。我的数据库引擎是innoDB。但是我怎么继续收到这个错误?
#1005 - Can't create table 'beatbeast.tracks' (errno: 150)
它没有显示错误所在的行。
答案 0 :(得分:2)
如果MySQL从CREATE TABLE语句报告错误号1005, 并且错误消息引用错误150,表创建失败 因为没有正确形成外键约束。
检查accounts_profile.accnt_id
的数据类型是否与tracks.account_id
完全匹配。目前一个是int
,因此另一个也必须是int
。
此外,文档建议致电:
SHOW ENGINE INNODB STATUS
收到错误消息后,获取更详细的说明。
答案 1 :(得分:2)
Errno 150通常是主表引用列和引用列的确切数据类型不匹配的结果。在您的情况下,tracks.account_id
是已签名的INT
,但其引用accounts_profile.accnt_id
的列为INT UNSIGNED
。因此,您必须使用tracks
为INT UNSIGNED
创建account_id
表:
CREATE TABLE tracks(
track_id int NOT NULL AUTO_INCREMENT,
account_id int UNSIGNED,
track_name varchar(255),
track_path varchar(255),
track_art_path varchar(255),
track_desc text,
primary key(track_id),
FOREIGN KEY (account_id) REFERENCES accounts_profile(accnt_id)
)