18

次の 2 つのクエリを実行すると (絶対に必要なものまで削除しました):

mysql> CREATE TABLE foo(id INT PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE bar ( id INT, ref INT, FOREIGN KEY (ref) REFERENCES foo(id)) ENGINE InnoDB;

次のエラーが表示されます: ERROR 1005 (HY000): テーブル './test/bar.frm' を作成できません (errno: 150)

**** は私のエラーですか? これを30分間見つめている間、私は彼を見つけられませんでした。

4

7 に答える 7

31

制約からFOREIGN KEY

削除されたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名と型が必要であり、参照されるキーにインデックスが必要です。これらが満たされていない場合、MySQL はエラー番号 1005 を返し、エラー メッセージでエラー 150 を参照します。

私の疑いfooでは、他のすべてが問題ないように見えるため、InnoDB として作成しなかったことが原因であると思われます。

編集:同じページから -

両方のテーブルは InnoDB テーブルである必要があり、TEMPORARY テーブルであってはなりません。

于 2009-05-05T15:22:11.423 に答える
12

コマンドを使用してSHOW ENGINE INNODB STATUS、エラーに関するより具体的な情報を取得できます。

Status多くのテキストを含む列で結果が得られます。

たとえば、次のような LATEST FOREIGN KEY ERROR というセクションを探します。

------------------------
LATEST FOREIGN KEY ERROR
------------------------
190215 11:51:26 Error in foreign key constraint of table `mydb1`.`contacts`:
Create  table `mydb1`.`contacts` with foreign key constraint failed. You have defined a SET NULL condition but column 'domain_id' is defined as NOT NULL in ' FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT' near ' ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT'.
于 2013-10-22T14:37:27.837 に答える
1

これも持っている人のために、私は同じ問題を抱えていました:

参照されるテーブルのテーブル名を確認してください

テーブル名の末尾の「s」を忘れていました

例: テーブル クライアント --> クライアント

:)

于 2013-01-21T18:51:43.853 に答える
0

これは、「参照」キーワードの後に​​正しい列名を指定しなかった場合にも発生する可能性があります。

于 2015-09-08T12:00:58.670 に答える
0

私はまったく同じ問題を抱えていましたが、その理由は列の「照合」が異なっていたためです。1つはlatin1で、もう1つはutf8でした

于 2013-08-07T11:01:11.977 に答える