0

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

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

4

2 回答 2

2

Errno 150 通常是主表的引用列与引用列的确切数据类型不匹配的结果。在您的情况下,tracks.account_id是一个有符号的INT,但它引用的列accounts_profile.accnt_idINT UNSIGNED。因此,您还必须使用for创建tracks表:INT UNSIGNEDaccount_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)
)
于 2012-07-01T13:37:03.630 回答
2

文档中

如果 MySQL 从 CREATE TABLE 语句中报告错误号 1005,并且错误消息引用错误 150,则表创建失败,因为未正确形成外键约束。

检查数据类型是否完全accounts_profile.accnt_id匹配tracks.account_id。目前一个是一个int,所以另一个也必须是一个int

此外,文档建议调用:

SHOW ENGINE INNODB STATUS

在您收到错误消息以获得更详细的说明后。

于 2012-07-01T12:45:43.997 回答