phpMyAdmin truncateしようとすると外部キーエラーが発生する時の対処法

外部キー制約で参照されているレコードが存在するのにtruncateしようとするとエラーが発生するのは理解できるが、参照されているレコードがなくてもtruncateさせてもらえない仕様は謎である。

phpMyAdminでtruncate時、「外部キーのチェックを有効にする」チェックボックスが表示されていれば、オフにすればよい。しかし、このチェックボックスがない場合が面倒である。

コマンドで操作できる環境なら、以下のように外部キー制約を一時はずし、truncateして、外部キー制約を戻せばよい。

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE テーブル名;
SET FOREIGN_KEY_CHECKS = 1;

しかし、コマンドで操作するのは怖いし面倒である。
このコマンドはSET文なのでphpMyAdminのSQLで流すわけにもいかない。

なので、phpMyAdmin上から外部キーのチェックを無効にしてtruncateが出来ない場合は、全レコードを削除後にオートインクリメントを1から振り直すというのがおすすである。

DELETE FROM テーブル名
ALTER TABLE テーブル名 AUTO_INCREMENT = 1

これならphpMyAdminのSQLからでも実行できる。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です