ということが発生しまして、ちょっと詰まったのでやったこととか。

現象


テーブル作成時に外部キー制約をつけて作成しようとすると下記のようなエラーが発生してしまう。

1
errno: 150 "Foreign key constraint is incorrectly formed"

で、これだけでは解り辛いのでSHOW ENGINE INNODB STATUSで詳細を確認します。するとこのようなエラーが出ていました。

1
2
... with foreign key constraint failed.
Referenced table test_table not found in the data dictionary near ...

ちなみにこの辺りのエラーメッセージ事情については下記の翻訳記事がわかりやすいです。

MariaDB: InnoDBの外部キー制約のエラー

原因


まず原因からですが、対象のテーブルのストレージエンジンがMyISAMでした。で、全体の設定はInnoDBだったにも関わらず、なぜかこのテーブルだけMyISAMになってました。たぶん理由はなくてただのミスです。全テーブルがInnoDBに設定されていると思い混んでいたのでハマってしまいました。

対応


対象のテーブルのストレージエンジンをInnoDBに変更してよいのであればALTER文で変更して終わりです。

1
ALTER TABLE exmaple_table ENGINE=InnoDB;

後は外部キー制約をつけるだけです。

テーブルごとにストレージエンジンを調べる


ちなみに、テーブルごとにストレージエンジンを調べるには下記のSQLでイケます。

1
2
3
select TABLE_NAME, engine 
from information_schema.tables
where TABLE_SCHEMA = 'schema_name';