MySQLで外部キーを貼り直すときにエラーが出た場合

MySQLで外部キーを貼り直すときに以下の様なエラーが出ることがあります。

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

これは外部キーのルールから外れる不整合なデータが既にあるため、このデータを一旦削除する必要があります。

hogeに紐づくhoge_mapでhoge上からは削除されているがhoge_mapからは削除されてないデータが残っていた場合、

DELETE FROM hoge_map WHERE hoge_id NOT IN( SELECT hoge_id FROM hoge );

などのようにして不整合のあるデータを削除した上で

ALTER TABLE hoge_map ADD FOREIGN KEY (`hoge_id`) REFERENCES `hoge` (`hoge_id`) ON DELETE CASCADE;

と外部キーを設定します。

この外部キーを設定することで hoge上からデータを削除するとそれに紐づくhoge_mapのデータも削除されるようになります。