技術ブログ

削除系SQL「DELETE」、「TRUNCATE」、「DROP」の違い

はじめに

今回は初心者向けの記事となります。
業務でSQLを使用してデータを削除できるようになることは必要不可欠です。しっかり削除する対象のデータを指定しないと、大変なことになりますので、この記事を参考にいただければと思います。

データを削除するSQLは大きくわけて3種類あります。DELETE・TRUNCATE・DROPです。それらの違いについて説明します。
ここでは例として、データ削除する対象のテーブルを「test」テーブルとします。
※Oracleで実行する際のSQLとなりますので、他のDBの場合は少し異なるかもしれません。

DELETE文

テーブル内のデータを削除します。構文は以下となります。

DELETE FROM test WHERE ~ ;

WHERE句以降に条件を指定すれば、その条件にマッチしたデータのみを削除することができます。
もし、WHERE句がなくても実行できますが、その場合は指定したテーブル内の全データを削除してしまいますのでお気をつけください。

また、トランザクションを設定していればロールバック(=削除前の状態に戻す)することも可能ですので、誤って削除した場合でも復旧しやすいです。

TRUNCATE文

こちらもテーブル内のデータを削除しますが、テーブルを一旦削除した後、同じテーブルを再作成(データは空)します。
構文は以下です。

TRUNCATE TABLE test;

こちらはテーブル自体を一度削除してしまうので、WHERE句の指定ができません。ただ、DELETE文よりは高速に実行できます。

また、DELETE文と違い、ロールバックすることができないので、十分に注意して実行する必要があります。

DROP文

テーブル自体を完全に削除します。跡形も残りません。構文は以下です。

DROP TABLE test;

こちらもWHEREなど条件指定ができません。また、ロールバックもできませんので、気を付けて実行しましょう。

まとめ

簡単に書けてしまうSQL文でしたが、プロジェクトなどで大事なデータを削除してしまわないように細心の注意が必要です。
重要なテーブルに対して削除を実行する際は、DBやテーブルのバックアップを取ったり、他のメンバとのダブルチェックなどをしてSQLを実行しましょう。
では良いSQLライフを。

ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。

  • 選考ではありません
  • 履歴書不要
  • 技術の話が中心
  • 所要時間30分程度
  • オンラインOK

エンジニアと話してみる