【SQL】1分でわかるDELETEでのデータ削除方法!安全に削除するには?

みなさんこんにちは!フリーランスプログラマーのsatoです。

今回は削除を行う「DELETE」について学んでみましょう。

顧客データを全部削除してしまった!
なんてことになったらシャレになりません。しっかり学んで正しく使う必要があります。

  • [基本]「DELETE」とは
  • [基本]「DELETE」の使い方
  • [基本]「WHERE」で条件をつけよう!
  • [応用]「SELECT」と組み合わせて使ってみよう!
  • [応用]より安全に作業するために!
  • まず基本的な使い方から始め、サブクエリを用いた汎用的な使い方まで見てきましょうか。それではよろしくお願いいたします。

    目次

    「DELETE」とは

    「DELETE」とは一言で言えば「レコードの削除を行う命令」です。

  • 追加を行う「INSERT」
  • 更新を行う「UPDATE」
  • 取得を行う「SELECT」
  • 削除を行う「DELETE」
  • この4つは、SQLの基礎中の基礎なので、しっかり覚えておきましょう。

    「DELETE」の使い方

    使い方は非常に簡単です。

    DELETE FROM [テーブル名];

    これだけです!しかしこのコマンドだけを投げると、指定テーブルの全レコードの削除を行ってしまいます。

    そのため基本的には「WHERE」句を組み合わせて、削除レコードを指定する使い方が主な使い方になるでしょう。

    「WHERE」で条件をつけよう!

    「WHERE」句は、SELECTやUPDATEで使ったことがある人が大半でしょう。

    DELETEでも同様に、WHERE句で対象レコードを指定することになります。

    DELETE FROM [テーブル名] WHERE [条件];

    このような形ですね!

    [補足]NULLを判定するときはIS NULL演算子

    SQLでは条件文内部で「=」でNULLを判定できません。

    NULLを判定するためには以下のように「IS NULL」演算子を使用する必要があります。

    DELETE FROM [テーブル名] WHERE name IS NULL;

    詳細は以下のリンクを見てください。

    「SELECT」と組み合わせて使ってみよう!

    以下のような形でIN句を利用し、SELECTで取得した結果を元に、DELETEをかけることが可能です。

    DELETE FROM [テーブルA]
    WHERE
      [要素名] IN (
          SELECT [要素名] FROM [テーブルB] WHERE [条件]
        );

    一つ注意点としては、削除するテーブルと、同一テーブルをSELECTすることはできません。エラーとなりますので注意しましょう。

    IN句の詳細は以下から学んでみてください。

    より安全に作業するために!

    DELETEはレコードを削除してしまうコマンドです。そのため使用には細心の注意を払う必要があります。

    ここからは、より安全にDELETEをしようするためのテクニックについて、少しだけ見ていきましょう。

    先に必ずSELECTしよう!

    DELETEを投げる前に同一の判定条件で、SELECTを行い、条件に問題がないか確認しましょう。当たり前な話ですが、これをサボると非常に危険です。

    必ず行いましょう。

    確実性の高い条件をつけよう!

    例えば、userテーブルのid要素が1のユーザーデータを削除したかったとしましょう。

    その場合は以下のようなコマンドを投げることになると思います。

    DELETE FROM user WHERE id="1";

    しかし念には念をいれて、別の要素での複数の判定も合わせて入れておけばよりミスの少ない判定が行えるでしょう。

    例えばそのユーザーがヤマダさんだったなら、idでの判定と合わせて、一応念のため名前での判定も行っておくとミスが減らせるでしょう。

    DELETE FROM user WHERE id="1" AND name="ヤマダ";

    「LIMIT」をつけておこう!

    LIMITを使ったことがありますでしょうか。これは実行回数に制限をつける命令です。

    SELECTなどではよく使われますが、DELETE文などでも使用が可能です。例えば1件しか削除されないことが確定している場合は、念のため以下のようにつけておきましょう。

    DELETE FROM [テーブル名] WHERE [条件文] LIMIT 1;

    これをつけておくことで、条件文のミスで仮に全削除となってしまった場合でも、削除レコードを1つに抑えることが可能です。

    まとめ

    今回はDELETEについて学びました。非常に重要な命令です。そして、データを削除してしまうため、特に扱いに気をつけなければならない命令でもあります。

    顧客データを消してしまって、取り返しのつかない状況になってしまった!

    なんてことにならないためにも、理解を深めておくべき命令ですね!

    この記事を書いた人

    学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
    様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

    目次