SQL ServerのTRUNCATEとDELETEの違いとは?主な相違点と使い分けのポイント
Microsoft SQL Serverでデータを削除する際に使われる「DELETE」と「TRUNCATE TABLE」。どちらもテーブルからデータを取り除く構文ですが、内部の動作や仕組みには大きな違いがあります。本記事では、両者の基本的な違いと、それぞれの適切な使用場面について詳しく解説します。
DELETEステートメントとは
DELETEコマンドは、データベースからレコード(Record)を行(Row)単位で削除するためのコマンドです。DELETEでレコードを削除すると、すべての内部操作がトランザクションログ(Transaction Log)に記録され、関連する制約のチェックも実行されます。また、WHERE句と組み合わせることで、特定の条件に合致する行だけを選択的に削除することも可能です。
DELETEの主な特徴
- 行単位で削除が行われ、削除された各行はトランザクションログに記録される
- ログが残るため、誤って削除したデータでもトランザクションをロールバックすれば復元可能
- WHERE句を使えば条件を指定した部分削除ができる
- 実行にはテーブルに対するDELETE権限が必要(所有権の付与は不要)
- IDENTITY列(自動採番列)の値はリセットされない
- DELETEトリガーが設定されている場合は起動される
DELETEは単一のテーブルだけでなく、他のリレーショナルテーブルとの結合条件に基づいて特定のテーブルからデータを削除したい場合などにも広く使われています。
DELETEの基本構文
[ WITH <共通テーブル式> [ ,...n ] ]
DELETE
[ TOP ( expression ) [ PERCENT ] ]
[ FROM ]
{ table_name [ WITH ( table_hint [ ...n ] ) ]
| view_name
| rowset_function_limited
| table_valued_function
}
[ FROM <table_source> [ ,...n ] ]
[ WHERE { <search_condition>
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
]
}
}
]
[ OPTION ( <query_hint> [ ,...n ] ) ]
[ ; ]
TRUNCATE TABLEステートメントとは
TRUNCATE TABLEは、テーブル内のすべての行を一括して削除するためのコマンドです。DELETEと異なり行単位の処理ではなく、データページの割り当て解除という形で削除が行われるため、非常に高速に動作します。ただし、WHERE句による条件指定はできず、必ずテーブル全体のデータが対象となります。
TRUNCATE TABLEの主な特徴
- すべての行が一括削除される(WHERE句での条件指定は不可)
- データページ単位で処理されるため、DELETEより大幅に高速
- 消費されるトランザクションログの領域が少ない
- IDENTITY列(自動採番列)のカウンタがシード値にリセットされる
- 実行にはテーブルのALTER権限(または所有権)が必要
- 外部キー制約で参照されているテーブルに対しては実行不可
- DMLトリガーは起動されない
TRUNCATE TABLEの基本構文
TRUNCATE TABLE table_name [ ; ]
DELETEとTRUNCATE TABLEの違いまとめ
| 比較項目 | DELETE | TRUNCATE TABLE |
|---|---|---|
| 削除単位 | 行単位 | テーブル全体(一括) |
| WHERE句 | 使用可能 | 使用不可 |
| トランザクションログ | 全行分が記録される | ページ割り当て解除のみ記録 |
| 処理速度 | 比較的遅い | 高速 |
| IDENTITY列 | リセットされない | シード値にリセットされる |
| 必要な権限 | DELETE権限 | ALTER権限 |
| トリガー | 起動される | 起動されない |
| ロールバック | 可能 | トランザクション内なら可能 |
使い分けのポイント
特定の条件に該当するデータだけを削除したい場合や、削除操作を細かく制御・復元できるようにしたい場合はDELETEが適しています。一方、テストデータのクリアや一時テーブルの初期化など、テーブルの全データを素早く空にしたい場合はTRUNCATE TABLEが最適です。
なお、「TRUNCATE TABLEはロールバックできない」と思われがちですが、実際には明示的なトランザクション内で実行すればロールバック可能です。ただし本番環境での大量削除では、ログの肥大化やパフォーマンスへの影響も考慮し、運用要件に応じて両者を正しく使い分けることが重要です。
-
SQL Server 2017のインストール手順を徹底解説!初心者向けステップバイステップガイド
SQL Server 2017は、インストールプロセスにおいて多くの新機能が追加されたバージョンです。RやPythonに対応した「Machine Learning Service(機械学習サービス)」のサポート、SSIS Scale Out Master/Scale Out Workerの搭載、そしてPolyBaseの拡張オプションなどが含まれています。 本記事では、SQL Server 2017を段階的にインストールする具体的な手順を詳しく解説していきます。 はじめに:SQL Server 2017のダウンロード まず、SQL Server 2017のインストーラーは以下のMicrosof
-
MS SQL Serverでデータベースを選択する2つの基本方法
MS SQL Serverで操作対象となるデータベースを選択するには、主に以下の2つの方法があります。GUI操作とコマンド操作それぞれの特徴を理解し、状況に応じて使い分けることで、作業効率を高めることができます。 方法1:SQL Server Management Studio(SSMS)を使用する 視覚的に操作したい方には、SQL Server Management Studio(SSMS)を使った方法がおすすめです。 例として、msdbという名前のデータベース上でバックアップ履歴を参照するクエリを実行したい場合、ツールバーのドロップダウンリストからmsdbを選択します。 データベースのバッ