テーブルの外部キー制約確認方法(MySQL4.1)

需要があるのかどうか不明ですが、ひとまず必要にかられてやってみたので書いときます。

使うシチュエーション

レコード削除したいんだけどdeleteすると

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

と出てできない、という場合。
まあテーブル定義書やER図確認しろよとかありますが、ひとまず置いといて。

地道に簡単に消していく方法

1. コンソールでdelete from table_name where id=xxx などを実行し、上記エラーが出る。
2. 以下のコマンドを実行する

show innodb status;

3. 色々表示される中に"LATEST FOREIGN KEY ERROR"という欄があり、下記のような感じの記述がある。

delete from TABLE_2 where ID=1
Foreign key constraint fails for table `scheme_1/TABLE_1`:
,
 CONSTRAINT `TABLE_1_ibfk_1` FOREIGN KEY (`COLUMN_1`)
REFERENCES `TABLE_2` (`COLUMN_2`) ON DELE
TE NO ACTION ON UPDATE NO ACTION

この場合TABLE_2テーブルのレコードを消そうとしたらscheme_1.TABLE_1.COLUMN_1に設定された外部キー制約に引っかかって失敗しており、それはTABLE_2.COLUMN_2カラムを参照しているという事が分かる。
4. 3で分かった原因レコード(この例だとTABLE_1テーブルのレコード)を消す。
5. また外部キーエラーが出たら2から繰り替えして、元を辿って順番に消す。

あるテーブルに関する外部キー制約を全て知る方法

show table status from スキーマ名 like 'テーブル名';
show create table テーブル名;

のどちらかで分かります。ただしこれは、そのテーブルから他のテーブルへの参照が分かるだけなので、逆にそのテーブルを外部キーとして設定している他のテーブルが分かりません。
そちらを知りたい場合は

show table status from スキーマ名;

として全テーブル分を出力し、結果をgrepします。えらいベタなのでもっとスマートなやり方がありそうなものですが、ちょっと調べた範囲では見つかりませんでした。