无法创建表<tablename> errno 150 </tablename>

时间:2012-07-01 12:42:19

标签: mysql sql database errno

这是我的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)

它没有显示错误所在的行。

2 个答案:

答案 0 :(得分:2)

来自the documentation

  

如果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。因此,您必须使用tracksINT 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)
)