はじめに
こんにちは、Qiita初投稿です!🎉
今回は、Oracleでデータ削除を行う際に使うことがある PURGE と TRUNCATE の違いについて、調べた内容をまとめてみました。
(要点だけ知りたい方へ)
| 項目 | TRUNCATE | PURGE |
|---|---|---|
| 主な用途 | テーブルの全データを高速削除 | ゴミ箱(リサイクル)をスキップして完全削除 |
| ロールバック可否 | 不可 | 不可(削除済オブジェクトに対して) |
| トランザクション対応 | 非対応(即時反映) | 非対応 |
| 回復可能性 | FLASHBACKで復元不可 | 完全削除なので復元不可能 |
| よく使う場面 | 一時テーブルの初期化 | DROPしたテーブルを即削除したいとき |
TRUNCATEとは?
TRUNCATE TABLE users;
テーブルの全データを一瞬で削除
DELETE よりも高速
ロールバック不可
PURGEとは?
PURGE TABLE users;
リサイクルビンを使わず即削除
完全に削除され、復元不可能
🔧 共通点(似ている点)
- ロールバックできない:どちらも実行すると取り消しできません。
- トランザクションに対応していない:COMMIT や ROLLBACK の影響を受けず、即時に反映されます。
- 復元できない:一度実行すると、基本的に元に戻すことはできません(FLASHBACK 不可)。
⚔️ 相違点(違う点)
| 観点 | TRUNCATE | PURGE |
|---|---|---|
| 対象 | テーブルの中身(データ) | テーブルやオブジェクト自体 |
| よく使う場面 | データの初期化・高速削除 | DROP後に即座にリサイクルビンを飛ばしたいとき |
| 使用例 | TRUNCATE TABLE table_name; |
PURGE TABLE table_name; |
| 削除対象の行数 | 全行対象 | 対象のオブジェクト全体 |
📝 最後にひとこと
この記事が「TRUNCATE」と「PURGE」の使い分けの参考になれば幸いです!
間違いや補足があればぜひコメントで教えてください