.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. データベース
  4. MySQL
  5. MySQLのDELETEとは?DELETEで消すレコードの条件指定方法を解説!

MySQLのDELETEとは?DELETEで消すレコードの条件指定方法を解説!

  • MySQL
  • データベース
公開日時:   更新日時:
MySQLのDELETEとは?DELETEで消すレコードの条件指定方法を解説!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    最新情報や関心のある情報を毎日お届け。  FEnetメールマガジン    メルマガ登録はこちらから>>

    システム
    エンジニア
    DELETEを使ったデータ消去方法について教えてください。

    プロジェクト
    マネージャー
    DELETEは非常に重要な機能ですね。一口にデータ消去と言っても、様々な方法がありますので、実際のコードを見ながら理解を深めていきましょう。

    MySQLのDELETEの使い方を解説

    MySQLのDELETEとは?


    MySQLはオープンソースのリレーショナルデータベースです。フリーでありながら、YouTube・FaceBook・Twitter・Netflixなど、多くのサイトで利用され信頼の高さを誇ります。そのMySQLで使用するSQL文のうち、DELETEを解説します。

    SQLはデータベースを操作するための言語で、SELECT・INSERT・UPDATE・DELETEは4大命令と言われます。その1つのDELETEはデータの削除のために使用する重要な機能です。

    テーブル名のみを指定すると全てのレコードが消える

    SQL文の操作の対象はデータベースに属するテーブルです。テーブルはカラム(列)に分かれたレコード(行)という形式になっています。以下のサンプルはid、name、age、statusの4つのカラムがある3件のレコードを持つテーブルです。

    id name age status
    1 山田太郎 30 会社員
    2 佐藤花子 21 大学生
    3 鈴木三郎 15 中学生

    DELETE文の簡単な使い方は以下の通りです。

    DELETE FROM テーブル名

    これを実行すると、指定したテーブルの中身は全て消えます。

    WHEREを使えば指定した条件のレコードのみを消せる

    しかし全てのレコードを消したいというケースは実際にはあまりないでしょう。MySQLにはDROP TABLEというテーブルごと削除する命令文もありますが、それに近い行為です。DELETEを使う場合は条件を指定して消したいレコードを絞り込むのが普通です。

    DELETEで消すレコードの条件指定をするには、WHERE節を使います。上のサンプルのテーブルの名前が「Test」だとして、レコードを1件だけ消したい場合は以下のようにします。

    DELETE FROM Test WHERE id = 2

    結果は以下になります。idが2のレコードだけ削除されました。なおMySQLでこのようにテーブルの内容全てを表示するには「SELECT * FROM Test」を実行します。

    id name age status
    1 山田太郎 30 会社員
    3 鈴木三郎 15 中学生

    !=で=とは逆の意味になる

    上の例の

    WHERE カラム名 = 値

    の=は「等しいならば」という意味ですが、!=にすると「等しくないならば」と言う意味になります。以下を実行すると、

    DELETE FROM Test WHERE id != 2

    以下のようにidが2以外のレコードが削除されます。

    id name age status
    2 佐藤花子 21 大学生

    なお!=ではなく<>を使用しても同じです。

    不等号も使える

    =、!=、<>以外に不等号も使用できます。以下を実行すると、

    DELETE FROM Test WHERE age > 20

    以下のようになります。ageが20を超えるレコードが削除されています。

    id name age status
    3 鈴木三郎 15 中学生

    以下を実行すると、

    DELETE FROM Test WHERE age <= 15

    以下のようになります。ageが15以下が対象ということです。

    id name age status
    1 山田太郎 30 会社員
    2 佐藤花子 21 大学生

    ANDとORで複数の条件を指定できる

    WHERE節にANDを使うと「AかつB」のような複数の条件を指定できます。以下を実行すると、

    DELETE FROM Test WHERE age=30 AND status=’会社員’

    以下の結果になります。

    id name age status
    2 佐藤花子 21 大学生
    3 鈴木三郎 15 中学生

    ORは「AまたはB」と言う条件を指定できます。以下を実行すると、

    DELETE FROM Test WHERE age=30 OR status=’大学生’

    以下になります。該当する複数のレコードが削除されました。

    id name age status
    3 鈴木三郎 15 中学生

    BETWEEN ANDで範囲指定ができる

    BETWEEN ANDを使うと範囲指定ができます。以下を実行すると、

    DELETE FROM Test WHERE age BETWEEN 20 AND 30

    以下のようになります。この場合はageが20から30までという意味なので、21と30のレコードが削除されました。

    id name age status
    3 鈴木三郎 15 中学生

    INと()でリスト指定ができる

    INと()でリストの中の値のどれかに一致するレコードを対象にすることができます。以下のようにすると、

    DELETE FROM Test WHERE status IN(‘小学生’,’中学生’)

    以下の結果になります。該当する3番目のレコードだけが削除されました。

    id name age status
    1 山田太郎 30 会社員
    2 佐藤花子 21 大学生

    LIKEで文字列のマッチングができる

    LIKEと%と_で文字列の部分マッチングによる条件指定ができます。以下を実行すると、

    DELETE FROM Test WHERE name LIKE ‘%花%’

    以下の結果になります。nameに「花」を含むレコードが削除されました。

    id name age status
    1 山田太郎 30 会社員
    3 鈴木三郎 15 中学生

    以下を実行すると、

    DELETE FROM Test WHERE status LIKE ‘_学生’

    以下のようにstatusが〇学生のレコードが削除されます。

    id name age status
    1 山田太郎 30 会社員

    %は0文字以上の連続する任意の文字列、_は任意の1文字という意味です。わかりにくいかもしれませんが、色々と試してみれば理解できるでしょう。

    ORDER BYとLIMITで上位と下位の一部を削除できる

    ORDER BYとLIMITを組み合わせると、DELETEで便利に使えます。以下を実行すると、

    DELETE FROM Test ORDER BY age LIMIT 2

    以下の結果になります。ORDER BYはageを昇順に並び替えて、LIMIT 2で対象を2件に絞ります。そのためageが15、21、30のうちの15と21のレコードが削除されたということです。

    id name age status
    1 山田太郎 30 会社員

    DESCで降順にもできます。以下を実行すると、

    DELETE FROM Test ORDER BY age DESC LIMIT 2

    以下になります。ageが31、21、15のうち31と21のレコードが削除されたということです。

    id name age status
    3 鈴木三郎 15 中学生

    TRUNCATE TABLEでレコードを全て消せる

    DELETE FROM テーブル名だけだと全てのレコードを消してしまいますが、MySQLにはそれ専用の命令があります。それはTRUNCATE TABLEです。今回のサンプルで以下のようにすれば全レコードを削除できます。

    TRUNCATE TABLE Test

    これでDELETE FROM Testと同じ結果になりますが、違いもあります。

    TRUNCATE TABLEはロールバックできない

    DELETEの場合は1件ずつレコードを消すので遅いですが、TRUNCATE TABLEの内部処理ではDROP TABLEでテーブルを消した後に、CREATE TABLEで空のテーブルを作ります。このことにより、DELETEよりも処理が高速です。

    またDELETEの場合はロールバック(取り消し)できますが、TRUNCATE TABLEはやり直せません。TRUNCATE TABLEはMySQLのデータベースを整理する特殊な作業のみで使用するとよいでしょう。

    トランザクションを使えばミスをロールバックできる

    ロールバックの話題がでましたが、MySQLではトランザクションを使えばロールバックによるやり直しができます。ただしMySQLは初期状態ではオートコミットモードになっているので、その状態ではロールバックできません。まずそれを以下のように解除する必要があります。

    SET AUTOCOMMIT=false

    この状態でINSERTなどでレコードを追加し、終わったら、

    COMMIT

    をします。これでトランザクションをコミット(確定)できます。そしてこの後、以下でデータをうっかり全部消してしまったとします。

    DELETE FROM Test

    それでもコミットしていなければ、以下でロールバックして以前のコミットした状態に戻せるのです。コミットかロールバックするまでの流れをトランザクションと言います。

    ROLLBACK

    オートコミットモードを解除するとタイミングの良い所でコミットをする必要がありますが、活用してみましょう。

    システム
    エンジニア
    やり直しが効かない作業なので、細心の注意が必要ですね。

    プロジェクト
    マネージャー
    そうですね。また、様々な消去の方法を紹介しましたので、ぜひマスターしてください。

    MySQLのDELETEは注意して行おう

    MySQLのDELETEについて解説しましたが、ご理解頂けましたでしょうか。DELETEは削除を行うコマンドなので、ミスをすると取り返しがつかなくなります。DELETEを行うときは細心の注意を払いながら行いましょう。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    新着案件New Job