[MySQL] truncateの挙動
DBのストレージをMyISAMからInnoDBにしてみたら、テストを通らなくなったので調べてみた。各テストの前にテーブルをtruncateで初期化して、テストデータを流し込むようにしていたところが動いていない模様。
Q8. 数値型カラムにAUTO_INCREMENTを指定して、データを4件挿入しました。DELETE文でデータを消去し、再度挿入しましたが、数値型カラムが5から始まります。1から挿入したいのですが、どうすればいいのですか?(MySQL4.0、4.1、5.0共通)
A8. MyISAMテーブルであれば、DELETE文ではなくTRUNCATE文を実行することで、カラムを再び1から入力できます。MySQL5.0では、MyISAM、InnoDB共にこの方法でリセットできます。MySQL4.0、4.1では、MyISAMではリセットできますが、InnoDBのリセットはできません。
MySQL5.0だとMyISAM, InnoDB共にtruncateでリセットできるんですが、MySQL4.0, 4.1でInnoDBを使うと、truncateでauto_incrementの値がリセットされないようです。
実際にはtruncateを呼び出した時にdeleteが走っているらしく、そのためauto_increment値の初期化が行われないようです。必然的に「全レコードを削除するよりtruncateの方が速い」というのも、このケースでは成り立ちません。
MySQL4.0, 4.1でauto_increment値をリセットするには、全てのレコードを削除した上で
ALTER TABLE テーブル名 AUTO_INCREMENT = 1;
を実行してやるといいようです。
そもそも大した知識がない上に、5で覚えたことが多いから、4系のノウハウが足りてないなぁ…