私のテーブル定義:
CREATE TABLE x (
a INT NOT NULL,
FOREIGN KEY (a) REFERENCES a (id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE = InnoDB;
次のエラーが発生します。
ERROR 1005 (HY000): Can't create table './abc/x.frm' (errno: 150)
これは何を意味するのでしょうか?
私のテーブル定義:
CREATE TABLE x (
a INT NOT NULL,
FOREIGN KEY (a) REFERENCES a (id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE = InnoDB;
次のエラーが発生します。
ERROR 1005 (HY000): Can't create table './abc/x.frm' (errno: 150)
これは何を意味するのでしょうか?
多分これが理由です
削除されたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名と型が必要であり、参照されるキーにインデックスが必要です。これらが満たされていない場合、MySQL はエラー番号 1005 を返し、エラー メッセージでエラー 150 を参照します。
から: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
エラー メッセージ (perror 150) を取得するには、「errno」エラー番号を指定してperrorを使用します。
MySQL エラー コード 150: 外部キー制約の形式が正しくありません
これは、外部キー名が重複している場合にも発生します。
たとえば、長い名前を持つ 2 つの非常によく似たテーブルがあるとします。時間を「節約」するには、最初のテーブルの CREATE から外部キー名をコピー アンド ペーストします。それらはたまたま別のテーブルへの外部キーを共有しているため、1 つ以上の同一の外部キー名が生成されます。
モニターに頭をぶつけても、LCD では満足できないことに気付きましたか?
このエラーは、参照されるテーブルが InnoDB ストレージ形式を使用していない場合にもスローされます。
おそらくその a.id は存在しません。