2011-11-09 13 views
3

テーブルを作成しようとしていますが、netbeansがDBの最初のテーブルにエラーを起こすとすぐにスクリプトは失敗します。エラーコード1005、SQLステートHY000:テーブルerrnoを作成できません:150

どうすれば解決できますか?

CREATE TABLE filmy 
(
    Film_Id int NOT NULL, 
    Nazwa varchar(250), 
    Adres varchar(250), 
    Data_Utworzenia date, 
    Komentarz varchar(250), 
    Gat_Id int, 
    Sub_Id int, 
    Aut_Id int, 
    User_Id int, 

    Primary Key (Film_Id), 
    CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id), 
    CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id), 
    CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id), 
    CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id) 
) 

答えて

10

を実行した後に別のALTER TABLEのコマンドを実行します - (中央付近)の出力に埋もれては、「最後の外部キーエラー」セクションです。テーブルの作成が失敗した理由を正確に説明します。

通常、これは参照FKフィールドが存在しないため(typo、間違ったテーブル)、またはフィールドタイプの不一致が原因です。 FKリンクされたフィールドは、正確に定義と一致しなければなりません。チャーは(1)フィールドがcharにFK'dすることはできません(5)フィールド、等...

注:MySQLの5.5では、このためのコマンドはshow engine innodb status(感謝kewpiedoll99)

+0

+1タイプミスマッチについて私に思い出させました。 – gbn

+0

ありがとう!私は、問題がテーブルの参照を定義していたことを、主テーブルの参照の後で知りました。 – Malyo

+1

うわー! 'show innodb status 'はデバッグに貴重です。どうもありがとうございました! – barclay

0

コード150は外部キーエラーです。

参照されているテーブルまたは列のいずれかが存在しない(まだスクリプトの後の方)か、type/length/collat​​ion/charsetに一致しません。順番にそれらをコメントアウトして、どちらを見るかを確認します。

またはすべてのあなたの作成しますが、使用show innodb status

0

であるIインデックスを持たない列の外部キーを追加しようとすると、通常はそのエラーが発生します。私はあなたの関連する列のいずれも、SQLに表示されていないことに気付きました。ここで

+0

最近のmysqlバージョンでは、うまくいけば必要なインデックスが作成されます。 –

1

は私のソリューションです:

CREATE TABLE filmy 
( 
    Film_Id   int   NOT NULL, 
    Nazwa    varchar(250)  NULL, 
    Adres    varchar(250)  NULL, 
    Data_Utworzenia date    DEFAULT '0000-00-00', 
    Komentarz   varchar(250)  NULL, 
    Gat_Id   int    NULL, 
    Sub_Id   int    NULL, 
    Aut_Id   int    NULL, 
    User_Id   int    NULL, 
Primary Key (Film_Id, Gat_Id, Sub_Id, Aut_Id, User_Id) 
) ENGINE=INNODB; 

外部キー制約は、GATを作成した後に行われ、サブ、AUT &ユーザーや他のIDEには、テーブル制約を現実のものにするために、既存の2つのテーブルを持って知っていません! を試してください:変更テーブルfilmy追加制約gatfilmy外部キー(gat_id)更新時にgat(gat_id)を参照すると、削除制限が制限されます あなたは一貫性を保たなければなりません。テーブルの名前をgatまたはgatunekのどちらかにすることはできません。あなたは両方を定義していない場合、どのようにcatがgatまたはgatunekを知っていますか? 残りの制約を試してみて、変更する前にすべてのテーブルを作成しておいてください。

+0

それは基本的な順序の問題だった:) – Malyo

0

他のテーブルとの関係で、このテーブル名(filmy)で使用して、それをドロップした可能性があります。関係をチェックし、このテーブル名で使用するすべての場所を削除するか、テーブル名を変更します。たとえば、 "filmy1"を使用します。 テーブル名を変更しました。

この作品が欲しいです。

関連する問題