作成: 更新:

[mysql] Cannot add foreign key constraint.

この記事は最終更新日から1年以上が経過しています。この記事は最終更新日から12か月以上が経過しています。
このエントリーは約2分で読めます。

ってでた
情報少なすぎだけど、ちょっと見ればすぐわかる
※けどやり方すぐ忘れる、なのでメモ

現象

テーブルxxxbase
↑を結合するために
base.idの外部キーとしてxxx.base_idを登録しようとしたがエラー

解決

これを実行
SHOW ENGINE INNODB STATUS

したらいっぱい出力出るけど
この項目見る

※文字コードとかで改行なかったりするから、見づらいので注意

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
2021-11-01 00:00:00 0x0x0x0x0x0x0x Error in foreign key constraint of table test_database_1/#sql-1_7:  
FOREIGN KEY (`base_id`) REFERENCES `base` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE:  
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. 

要は xxx.base_id にインデックス貼ってなかったって話
貼り直したらOKだった

ちなみにindex貼ってるかどうかの確認は

show index from xxx;

でOK