いくつかの調査を行った後、テーブルエンジンタイプが一致しない場合、または外部キーの作成が何らかの理由で失敗した場合に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
のを使用して外部キー制約の違反を意味する
前
FooTypes
テーブルを作成しますか?ありがとう! –