MySQLで外部キーエラー[HY000][150] Create table ‘***’ with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns.

PCアザラシ IT

事件

MySQLで外部キーを張ろうとした時、このようなエラーが出た。

[HY000][150] Create table '***' with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns.

捜査

メッセージの内容に、どうにも納得がいかない。参照先にインデックスは存在している。

いろいろググってみて、このエラーメッセージが必ずしも適切でないことを疑った。

[MySQL] 外部キー制約作成時、ERROR 1005 (HY000): Can't create table - Qiita
概要 外部キー制約を付けたテーブル作成時、以下のエラーが発生した ERROR 1005 (HY000): Can't create table 'table_name' (errno: 150) このメッセージがあまり親切...

解決

テーブルの詳細を確認した。

select * from information_schema.tables;
select * from information_schema.columns;

あ!
参照元と参照先のカラムのCHARACTER_SET_NAMEが異なっていた。(片方はutf8mb4で、もう片方がutf8だった。)

犯人はお前だ!

関連するテーブルの外部キーを一旦削除し、対象のテーブルをutf8mb4に統一する。

ALTER TABLE {テーブル名} CONVERT TO CHARACTER SET utf8mb4;

その後に外部キーを作り直して解決した。

IT
広告
一郎くんどっとこむ