TRUNCATE文【TRUNCATE statement】
TRUNCATE文とは?

基本的な構文は「TRUNCATE TABLE テーブル名」で、多くのデータベース製品では「TABLE」を省略して「TRUNCATE テーブル名」と書くこともできる。WHERE句による条件指定はできず、常にテーブル全体が対象となる。テスト環境のデータリセット、ログ領域の初期化、集計用テーブルの再作成前処理といった場面で利用される。
同じくデータを削除するDELETE文との違いは処理方式にある。DELETE文は行を1件ずつ検証しながら削除し、その内容をトランザクションログに記録する。一方、TRUNCATE文はデータ領域をまとめて解放するため、大量のデータを扱う場合に高速で処理できる。また、IDENTITY列やAUTO_INCREMENT列を持つテーブルでは、TRUNCATE文の実行後に連番のカウンタが初期値に戻る製品が多い。DELETE文では連番情報が保持されるため、この挙動の違いが運用上の判断に影響することがある。
トランザクション制御との関係は製品によって異なる。PostgreSQLやMySQLのInnoDBではROLLBACKによる取り消しが可能だが、Oracle DatabaseではTRUNCATE文の実行が即座に確定されるため取り消しができない。また、トランザクションログが生成されない製品では、レプリケーションの対象となっているテーブルに実行できない場合もある。
他のテーブルから外部キーで参照されているテーブルに対しては、多くの製品でTRUNCATE文の実行がエラーとなる。参照整合性を保つための制御であり、事前に関連テーブルのデータを削除するか、制約を一時的に無効化する対処が必要になる。なお、DELETE権限とは別にTRUNCATE文の実行権限を独立して設けている製品もある。