TRUNCATE (SQL)
TRUNCATE または TRUNCATE TABLE ステートメントは、テーブルから全ての行を削除するSQLである。データベースが持つ整合性を維持する機構をスキップすることで高速な削除を実現している場合が多い。削除する行それぞれを記録するためのトランザクションログの出力を避けることで、効率的に全ての行を削除できる。
「TRUNCATE TABLE 表名
」は「DELETE FROM 表名
」とほぼ等価だが、以下の点で異なる。
WHERE
句を指定できない。全ての行は一括削除される。- 対象のテーブルの排他ロックを取得する。
- 外部キーで参照されるテーブルに対しては実行できない。外部キーによる整合性の確認を行わないためである。
- Oracle Database や MySQL の一部のストレージエンジンでは、
TRUNCATE
後、自動的にコミットが行われる。TRUNCATE による削除はロールバックできない。- PostgreSQL のように、
TRUNCATE
をトランザクション内で実行でき、ロールバックも可能なデータベースも存在する。対象のテーブルを「古いバージョン」としてトランザクションの完了時まで保持することで実現されている。
- PostgreSQL のように、
- Microsoft SQL Server では
TRUNCATE TABLE
ステートメントはレプリケーションやログシッピングの対象となっているテーブルに対して実行できない。どちらも遠隔のデータベースの一貫性を保つためにトランザクションログを利用しているためである。
構文
編集TRUNCATE [TABLE] テーブル名 [, テーブル名]
多くのデータベース製品では TABLE
は省略可能である。