2012-02-21 16 views
1

いくつかの調査を行った後、テーブルエンジンタイプが一致しない場合、または外部キーの作成が何らかの理由で失敗した場合にerrno 150が発生するようです。とにかく、私は、スクリプトを作成し、次のようになりますので、SQLException:テーブルerrno 150/foreign keyを作成できません

CREATE TABLE IF NOT EXISTS Users 
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    fooType INT UNSIGNED NOT NULL DEFAULT 0, 
    ...More columns, nothing special... 
    PRIMARY KEY (`id`), 
    CONSTRAINT Users_fooType_fk 
     FOREIGN KEY (fooType) 
     REFERENCES FooTypes (id) 
     ON DELETE CASCADE 
) ENGINE = InnoDB# 

CREATE TABLE IF NOT EXISTS FooTypes 
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    ...More columns, nothing special... 
    PRIMARY KEY (`id`) 
) ENGINE = InnoDB# 

、私のテーブルエンジンは(私は私の知る限り、デフォルトではInnoDBを使用してMySQLの5.1.49を使用しています)の両方を明示的および暗黙的に一致します。

唯一の違いは、Users.fooTypeにデフォルトがあることです。それは問題ですか?そうであれば、どのようにデフォルトを設定できますか?そうでない場合は、コードに何か間違っているものが誰かに見えますか?申し訳ありませんが、少し難読化する必要がありましたが、コードの難読化された塊が正しいかどうかはわかりません。それは、FooTypesが存在しても、前参照FooTypesを使用して外部キー制約の違反を意味する

答えて

2

あなたはFooTypes(id)Users(fooType)その参照を提供する前に存在しなければならない、つまり、Usersの前にテーブルFooTypesを作成する必要があります。

+0

FooTypesテーブルを作成しますか?ありがとう! –

1

REFERENCES FooTypes (id)は、列はもちろんのこと、FooTypesという表が見つからないと失敗します。

ソリューション:
ただ、それはないだろう、うん、それはそれを行うだろう*手のひらを顔に当てる* Users

関連する問題