TRUNCATE (SQL)

TRUNCATE または TRUNCATE TABLE ステートメントは、テーブルから全てのを削除するSQLである。データベースが持つ整合性を維持する機構をスキップすることで高速な削除を実現している場合が多い。削除する行それぞれを記録するためのトランザクションログの出力を避けることで、効率的に全ての行を削除できる。

TRUNCATE TABLE 表名」は「DELETE FROM 表名」とほぼ等価だが、以下の点で異なる。

  • WHERE 句を指定できない。全ての行は一括削除される。
  • 対象のテーブルの排他ロックを取得する。
  • 外部キーで参照されるテーブルに対しては実行できない。外部キーによる整合性の確認を行わないためである。
  • Oracle DatabaseMySQL の一部のストレージエンジンでは、TRUNCATE 後、自動的にコミットが行われる。TRUNCATE による削除はロールバックできない。
    • PostgreSQL のように、TRUNCATE をトランザクション内で実行でき、ロールバックも可能なデータベースも存在する。対象のテーブルを「古いバージョン」としてトランザクションの完了時まで保持することで実現されている。
  • Microsoft SQL Server では TRUNCATE TABLE ステートメントはレプリケーションやログシッピングの対象となっているテーブルに対して実行できない。どちらも遠隔のデータベースの一貫性を保つためにトランザクションログを利用しているためである。

構文

TRUNCATE [TABLE] テーブル名 [, テーブル名]

多くのデータベース製品では TABLE は省略可能である。