コンテンツにスキップ

TRUNCATE (SQL)

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Marmot (会話 | 投稿記録) による 2009年8月29日 (土) 10:25個人設定で未設定ならUTC)時点の版 (en:Truncate (SQL) (22 March 2009 at 00:26) を翻訳。)であり、現在の版とは大きく異なる場合があります。

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

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

TRUNCATE TABLE mytableDELETE FROM mytable ステートメント (WHERE句なし) とほぼ等価だが、以下の例外がある:

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

構文

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

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