SQL Server

【SQLServer】DELETE文とTRANCATE文とDROP文の違いは?

SQLの文法
記事内に商品プロモーションを含む場合があります

データベースからレコード(テーブル)を削除するSQL文は3種類あります。

なんとなく違いが分かるようで分からない方のためにDELETE文とTRANCATE文、DROP文の違いをご紹介します。

臨機応変に使い分けてください。

DELETE文とTRANCATE文とDROP文の違い

ざっくりまとめると以下の表のようになります。

命令 削除対象 削除の取消(※) 実行後のテーブル
①DELETE文 レコード 維持
②TRANCATE文 テーブル 不可 維持
③DROP文 テーブル 不可 消去

※削除の取り消し=ROLLBACK(ロールバック)可能

DELETE文

DELETE FROM テーブル名 WHERE フィールド名=xxx;

レコード単位でデータを削除します。

WHERE句を記述しなければテーブル内の全レコード削除となります。

COMMITしていなければROLLBACKすることで削除の取り消しが可能です。

一般的なデータの削除はこちらの構文を使うことが多いと思います。

※全レコード削除してもオートインクリメントの設定は残ります。(削除前の最終値が保持されます)

TRANCATE文

TRUNCATE TABLE テーブル名;

TRUNCATE文は結果的にはテーブル内の全レコード削除した状態となるので一見DELETE文にWHERE句を記述しなかった場合と同じに見えます。

ですが、TRUNCATEは一旦無条件にテーブルを削除(DROP)した後、改めて空のテーブルを再作成する処理となります。

このため、オートインクリメント設定は初期化されます。

また、物理的にテーブルを削除するため一旦実行すると元に戻すことはできません。

かなり注意が必要な命令ですが、ログを残さないため処理は非常に高速です。

主にTRANCATEを使うシーンは、作業用の一時テーブルの一括クリアやデータ移行(コンバート時)時にバックアップを取ったうえで計画実行する際などです。

通常時は処理速度優先など、やむを得ない事情がない限りは使いたくない感じです(怖いので…)

DROP文

DROP TABLE テーブル名;

DROP文は先ほどのTRANCATEでも触れましたが、単純にテーブルの削除となります。

こちらもログは残りませんので削除の取り消しはできません。

注意して実行しましょう。

TRANCATEと同様使うシーンは作業用の一時テーブルの削除などです。

まとめ

データの削除は基本的にはDELETE文で事足ります。

【全データ削除】という意味合いではDELETEとTRANCATEは同義ですが違いを意識して正しく使いましょう!

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。