外部キー制約で参照されているレコードが存在するのに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からでも実行できる。