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がCREATETABLEステートメントからエラー番号1005を報告し、エラーメッセージがエラー150を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成に失敗しました。

のデータ型が完全にaccounts_profile.accnt_id一致することを確認してくださいtracks.account_id。現在、1つはであるintため、もう1つもである必要がありますint

さらに、ドキュメントは次のように呼び出すことを提案しています。

SHOW ENGINE INNODB STATUS

詳細な説明については、エラーメッセージが表示された後。

于 2012-07-01T12:45:43.997 に答える