サイトアイコン プログラマー(PG)・システムエンジニア(SE)になるための入門講座

DELETEとTRUNCATEの違いとは?データベース初心者向けにわかりやすく解説

DELETEとTRUNCATEの違いとは?データベース初心者向けにわかりやすく解説

結論として、DELETEは条件を指定してデータを削除できるSQLTRUNCATEはテーブル内のデータを一括で高速削除するSQLです。

どちらもデータを削除するためのSQLですが、処理速度や使い方、復旧方法などに大きな違いがあります。実際のIT業務でも使い分けが重要です。

DELETEとTRUNCATEとは?

DELETEとは

DELETEは、テーブル内のデータを削除するSQL文です。

WHERE句を使用することで、特定のレコードだけを削除できます。

例えば「社員番号が1001の社員だけ削除する」といった操作が可能です。

TRUNCATEとは

TRUNCATEは、テーブル内のすべてのデータを一括削除するSQL文です。

データを高速に削除できますが、WHERE句は使用できません。

テーブルの構造(カラムや主キーなど)はそのまま残り、データだけが削除されます。

DELETEとTRUNCATEの違い

比較項目 DELETE TRUNCATE
削除対象 指定したレコード 全レコード
WHERE句 使用できる 使用できない
処理速度 比較的遅い 非常に高速
ログ記録 1件ずつ記録される 最小限の記録
ロールバック トランザクション内なら可能 DB製品によって異なる
主キーの採番 通常はリセットされない リセットされるDB製品がある

どんな場面で使われるのか

DELETEが使われる場面

TRUNCATEが使われる場面

なぜ使い分けるのか

DELETEは必要なデータだけ削除できるため、安全性が高いという特徴があります。

一方、TRUNCATEは大量データを高速に削除できますが、テーブル内のデータがすべて削除されるため、実行前の確認が非常に重要です。

初心者が混乱しやすいポイント

よくある勘違い 正しい内容
DELETEもTRUNCATEも同じ 削除方法や用途が異なる
TRUNCATEで一部だけ削除できる 全件削除のみ
DELETEは高速 大量データでは時間がかかることがある
TRUNCATEはテーブルを削除する 削除するのはデータだけ

実際のIT現場での利用例

本番環境ではDELETEを使用することが多くあります。

例えば「1年前より古いログだけ削除する」といった運用では、WHERE句を利用して必要なデータだけ削除します。

一方、開発環境ではテストデータを毎日削除することがあり、その際はTRUNCATEを利用して短時間で初期化するケースがあります。

筆者が現場で経験したこと

新人時代、DELETEを実行するつもりでWHERE句を書き忘れ、テーブル内のデータをすべて削除してしまったことがありました。

TRUNCATEではありませんでしたが、結果は全件削除となり、バックアップから復旧する作業が必要になりました。

それ以降は、DELETEを実行する前にSELECT文で対象データを確認し、WHERE句が正しいことを必ずチェックするようになりました。

業務でよくあるトラブル

トラブル 原因
全データが削除された DELETEでWHERE句を書き忘れた
TRUNCATEが実行できない 外部キー制約が設定されている
処理に時間がかかる 大量データをDELETEしている
採番が変わった TRUNCATE後にIDがリセットされた

原因の切り分け

削除処理で問題が発生した場合は、次の順番で確認します。

  1. DELETEとTRUNCATEのどちらを実行したか確認する
  2. WHERE句が正しく指定されているか確認する
  3. 削除対象の件数をSELECT文で確認する
  4. 外部キー制約が存在しないか確認する
  5. バックアップから復旧可能か確認する

GUIでの確認方法

SQL Server Management Studio(SSMS)やOracle SQL Developerなどでは、テーブルのデータを一覧表示して削除対象を確認できます。

削除前に件数を確認しておくことで、誤操作を防ぎやすくなります。

CUI(SQL)での確認方法

DELETEを実行する前に、同じ条件でSELECT文を実行し、本当に削除したいデータだけが表示されることを確認しましょう。

TRUNCATEはWHERE句を使用できないため、実行前に対象テーブルを十分確認することが重要です。

ログの確認方法

削除操作後は、データベースの監査ログやトランザクションログを確認します。

本番環境では、誰がいつ削除したかを記録している場合もあります。

イベントビューアーの確認方法

DELETEやTRUNCATE自体の実行履歴は通常イベントビューアーには記録されません。

ただし、データベースサービスの異常やディスクエラーなどが疑われる場合は、Windowsのイベントビューアーを確認することがあります。

PowerShellで確認できる内容

PowerShellではSQLを実行し、削除前の件数確認やバックアップ取得、削除後の件数確認などを自動化できます。

大量データを扱う運用業務では、PowerShellを利用した運用が行われることもあります。

影響範囲を考えるポイント

新人が覚えておきたいポイント

上司へ報告するポイント

エスカレーションするタイミング

関連するIT用語

よくある質問(FAQ)

DELETEとTRUNCATEはどちらが速いですか?

一般的にはTRUNCATEの方が高速です。一括でデータを削除するため、大量データを削除する際に適しています。

DELETEでWHERE句を書かなかった場合はどうなりますか?

テーブル内のすべてのレコードが削除されます。本番環境では重大な障害につながる可能性があるため、実行前の確認が欠かせません。

TRUNCATEはテーブルも削除しますか?

いいえ。削除されるのはデータだけです。テーブルの構造やカラム、制約はそのまま残ります。

本番環境ではどちらを使うことが多いですか?

条件を指定して安全に削除できるDELETEが利用されることが多くあります。TRUNCATEは主に開発環境やテスト環境、または運用手順が明確に定められた場面で使用されます。

まとめ

DELETEは必要なデータだけを削除するためのSQLTRUNCATEはテーブル内のすべてのデータを高速で削除するためのSQLです。

DELETEはWHERE句による細かな条件指定ができるため、本番環境でよく利用されます。一方、TRUNCATEは全件削除しかできませんが、大量データを短時間で削除したい場合に適しています。

どちらもデータを削除する強力なSQLです。特にDELETEではWHERE句の指定漏れ、TRUNCATEでは実行対象のテーブル間違いが重大な障害につながるため、削除前にSELECT文で対象データを確認し、必要に応じてバックアップを取得することを習慣にしましょう。

モバイルバージョンを終了