0

MySQLでテーブルを作成しようとしています:

CREATE TABLE band ( 
    id int NOT NULL AUTO_INCREMENT, 
    name varchar(255) NOT NULL ,
    frontman int NOT NULL ,   
    PRIMARY KEY(id), 
    FOREIGN KEY(frontman) references person(id)  
)  

新しいテーブルには、このテーブルへの外部キーがあります。

CREATE TABLE person (
    id int NOT NULL AUTO_INCREMENT,
    nick varchar(255) NOT NULL,
    password varchar(255) NOT NULL,
    admin boolean,
    PRIMARY KEY(id)
)

エラーは次のとおりです。

#1005 - Can't create table 'apptestdb.band' (errno: 150)

何が間違っているのですか?ありがとうございました。

4

3 に答える 3

0

別のテーブルへの外部キーを作成しているpersonので、このテーブルも共有する方がよいでしょう。

このテーブルを作成してから削除するだけbandFOREIGN KEY問題なく動作します。

ここでデモを見てください。あなたのテーブルはうまく機能します。

編集。ここであなたの作業テーブルとpersonテーブル

 create table  person (
  id  int NOT NULL AUTO_INCREMENT ,
  PRIMARY KEY(id))
  ;

 CREATE TABLE band ( 
 id int NOT NULL , 
 name varchar(255) NOT NULL ,
 frontman int NOT NULL ,   

 FOREIGN KEY(frontman) references person(id)
 ); 

作業テーブルのデモ

于 2013-03-02T15:11:18.633 に答える
0

私はstackoverflowサイトの エラー150からこれを取得しました。問題の解決に役立つ可能性があることを参照してください。

エラーコード:1005-コードに間違った主キー参照があります

通常、参照FKフィールドが存在しないことが原因です。タイプミスがあるか、同じであるかどうかを確認するか、フィールドタイプの不一致がある可能性があります。FKにリンクされたフィールドは、定義と完全に一致する必要があります。

いくつかの既知の原因は次のとおりです。

2つのキーフィールドのタイプやサイズが正確に一致していません。たとえば、1つがINT(10)の場合、キーフィールドもINT(10)である必要があり、INT(11)やTINYINTではありません。クエリブラウザはINT(10)とINT(11)の両方でINTEGERだけを視覚的に表示することがあるため、SHOWCREATETABLEを使用してフィールドサイズを確認することをお勧めします。また、一方がSIGNEDでなく、もう一方がUNSIGNEDであることを確認する必要があります。それらは両方とも完全に同じである必要があります。参照しようとしているキーフィールドの1つにインデックスがないか、主キーではありません。リレーションシップのフィールドの1つが主キーでない場合は、そのフィールドのインデックスを作成する必要があります。外部キー名は、既存のキーの複製です。外部キーの名前がデータベース内で一意であることを確認してください。これをテストするには、キー名の最後にランダムな文字をいくつか追加するだけです。テーブルの一方または両方がMyISAMテーブルです。外部キーを使用するには、テーブルが両方ともInnoDBである必要があります。(実際には、両方のテーブルがMyISAMの場合、エラーメッセージは表示されません。キーは作成されません。)クエリブラウザでは、テーブルタイプを指定できます。カスケードONDELETESET NULLを指定しましたが、関連するキーフィールドがNOTNULLに設定されています。これを修正するには、カスケードを変更するか、フィールドをNULL値を許可するように設定します。

文字セットと照合オプションが、テーブルレベルとキー列の個々のフィールドレベルの両方で同じであることを確認してください。

外部キー列にデフォルト値(つまり、default = 0)があります

リレーションシップのフィールドの1つは、組み合わせ(複合)キーの一部であり、独自の個別のインデックスはありません。フィールドには複合キーの一部としてインデックスがありますが、制約で使用するには、そのキーフィールドに対してのみ個別のインデックスを作成する必要があります。

ALTERステートメントに構文エラーがあるか、リレーションシップのフィールド名の1つを誤って入力しました

10外部キーの名前が最大長64文字を超えています。

于 2013-03-02T14:17:32.253 に答える
0

私は最終的に解決策を見つけます。簡単です。各 CREATE TABLE コマンドの後は、コマンドを終了するためにセミコロンにする必要があります。私が実行した方法では、次の CREATE TABLE コマンドを最初のコマンドのパラメーターとして使用しようとしました。

于 2013-03-02T18:11:00.637 に答える