エラー

外部キー制約を追加しようとした時、下記エラーで怒られました。

ERROR 1215 (HY000): Cannot add foreign key constraint

“外部キー制約を追加できません”

もっと詳細なエラーログが……ほしい……! と思ったので調べました。

SHOW ENGINE INNODB STATUS で外部キー制約時のエラーを確認

恐らくとてつもなく初歩的な話だと思うのですが、SHOW ENGINE 構文なるものがあると。

SHOW ENGINE INNODB STATUS

SHOW ENGINE INNODB STATUSは、InnoDBストレージエンジンの状態に関するInnoDB標準モニターからの広範囲にわたる情報を表示します。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.5.16 SHOW ENGINE 構文

便利だ!!!!!

実践

早速入って見てみます。

$ docker exec -it [docker-name] bash
# mysql -u [username] -p
> SHOW ENGINE INNODB STATUS

------------------------
LATEST FOREIGN KEY ERROR
------------------------
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.

“参照された列が最初の列として表示される参照された表にインデックスが見つからないか、テーブルの列タイプと参照された表が制約に一致しません”

この一文に沿って見てみたら、参照される側のテーブルの項目と参照するテーブルの項目が合っていませんでした。

ちなみにこのエラーの前は(調べる前に気がつきましたが)「参照される側のテーブルの項目は PRIMARY KEY でなくてはならない」と言うのを忘れて外部キーを設定しようとしてました。
正月ボケだね〜フフと言いたいところですが、これは単純な初心者ボケ(ガチ)です。

型を参照される側のテーブルの項目に合わせたら無事設定できました。

参考にさせて頂いたもの

お世話になりました。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.5.16 SHOW ENGINE 構文
MySQL の外部キー追加時にエラー…ERROR 1215 (HY000): Cannot add foreign key constraint
なぜあなたは SHOW ENGINE INNODB STATUS を読まないのか - そーだいなるらくがき帳