【MySQL入門】DELETE文の使い方を紹介!データの削除方法とは

皆さんMySQL使ってますか?今回はテーブルのデータを削除するDELETE文、そこから派生して高速にデータを削除できるTRUNCATE文、テーブルそのものを削除するDROP TABLE文を紹介します。

MySQLを学びはじめの頃は、DELETEしてるのにテーブルが削除できない!とか、DELETEしたら全データが吹き飛んだ!とか色々とあるかと思います。特に削除系の操作はデータが吹き飛ぶ可能性があるので、色々と難しく感じてしまう部分もありますよね。

一度まとめて理解してしまえば、そこまで難しいものでもないので、これを機にサクッと理解してしまいましょう!

テーブルのデータを消す:DELETE文

まずは削除の基本、DELETE文です。DELETE文の書式は次のようになります。

書式

DELETE FROM データベースの名前 WHERE 条件;

WHERE以下は省略可能ですが、省略した場合、全データが消去されます。ただし、消去されるのはレコードだけで、カラム構造とテーブルそのものは残る点に注意しましょう。

実例を見たほうがわかりやすいので、以下実際にコマンドを入力してテーブルを操作してみましょう。まず、今回扱うデータベースとテーブルを用意します。

実行結果

ここらへんは問題ありませんよね。基礎的な部分に不安のある方は以下の記事を読んで基礎を固めておきましょう。


【MySQL入門】テーブルの基礎を学ぶ!作成・一覧・行数取得まで紹介
更新日 : 2019年6月19日

【MySQL入門】SELECT文の使い方を解説!WHERE,LIMITで条件を絞り込む
更新日 : 2019年6月13日

ではさっそくDELETE文でデータを消していきましょう。まずは基本の使い方、WHERE句で条件を指定してデータを消してみましょう。今回は年齢が22歳以下のデータを消してみます。

実行結果

確かに21歳のサブローのデータが削除されました。このように、DELETE文はWHERE句で条件を指定してデータを消去していく使い方が基本になります。

では、WHERE以下を省略して、全件消去をしてみましょう。

実行結果

全件消去の結果、テーブルのデータはすべて消去されてしまいました。(Empty set)ですが、カラムの構造は依然として残っており、テーブルそのものもなくなったわけではありません。

テーブルそのものを消去したい場合は後で紹介するDROP文を、カラムを削除する場合はALTER TABLE DROP文をそれぞれ利用します。

高速にテーブル全体のデータを削除:TRUNCATE文

さて、DELETE文はデータを1件ずつ消去していくコマンドです。そのため、条件指定が柔軟にでき、全体の量も把握できるというメリットがあります。ですが、細かい条件設定は不要で、とにかく全データを素早く消してしまいたい、という場合も時にはあります。

そういった場面では、1件ずつ消去していくDELETE文は速度的に不満が出やすい構文だったりします。とにかく全データをすばやく消去したいんだ!という場面ではDELETE文よりも速度的に有利なTRUNCATE文がおすすめです。

書式は次のようになります。

TRUNCATE TABLE テーブル名;

実際に動かしてみましょう。

実行結果

最初に挿入した3件のデータが全て消去されて、空のテーブルが残ったのが確認できましたか?結果としてはDELETE文による全件消去と同じ結果が得られました。

たった3件のデータでは実感が湧きにくいですが、DELETEよりもかなり高速に全件消去を行うことが可能なのがTRUNCATE文の特徴です。

なぜ速度に差が出るのかというと、DELETEは1件ずつ消去していく方法なのに対して、TRUNCATE文はテーブルそのものを1回削除して、同じテーブルを作り直しています。

このため、特に大量のデータを抱えたテーブルに対してTRUNCATE文はDELETEに比べて速度が出やすいのです。ただし、方法の差により次の3点がDELETEと異なります。

  • 削除されたデータの件数がわからない(Query OK, 0 rows affected と表示)
  • AUTO_INCREMENTの値がリセットされる
  • ロールバックが不可能

特に最後の点は取り返しがつかないという意味で重要です。TRUNCATE文を使う場合は細心の注意を払いましょう。

テーブルそのものを削除:DROP TABLE文

最後にテーブルそのものを消去するDROP TABLE文を紹介します。DROP TABLE文の書式は次のようになります。

DROP TABLE テーブル名;

では、実際に動かしてみましょう。

実行結果

実行前にあったname_age_listテーブルが実行後には消去された(Empty set )のが確認できました。DROP TABLE文について、基本的な使い方はこれで全部なのですが、プログラムの中で使う際に便利なトピックを一つ紹介します。

DROP TABLE文はIF EXISTS句を追加することで、もし指定のテーブルが存在するならば削除する、という動作に切り替えることができます。

書式

DROP TABLE IF EXISTS テーブル名;

SQL文を手作業で打ち込んでいる段階ではありがたみを感じない構文ですが、MySQLをプログラムから制御する段階になると、DROP文でエラーを抑制することができるためよく使われます。

プログラムからテーブルを初期化したくなったときにはこの構文を思い出してください。

データベースの管理に困っているあなたへ

MySQLは世界でもっとも利用されているデータベース管理システムです。大容量のデータに対しても高速で動作し、便利な機能がたくさんあるので、「Yahoo!」や「Google」といった大手企業にも採用されています。

あなたも、MySQLを使って、

  • 大規模なデータベースを管理したい!
  • データベースを刷新して業務を効率化したい!
  • 管理システムの開発案件を受注してフリーランスとして活躍したい!


と考えて学習を始めたのではないでしょうか?MySQLを身に付けることが出来ればこのような案件は全てこなすことができます。

しかし、独学での学習はエラーの連続。思うように学習が進まず困っている方もいらっしゃいますよね。そんな時はプログラミングスクールの受講をおすすめいたします。

手前味噌ではありますが、弊社「侍エンジニア塾」では学習に躓くポイントを分析して、より効率的にプログラミングを身に付けることができる侍式メソッドを提供しています。

  • 最初から最後まで講師が変わらない業界唯一の専属マンツーマン
  • あなただけに作成するオリジナルカリキュラム
  • フリーランスへの転向までサポートするキャリアカウンセラー


これらを一挙に叶えるのが「マンツマンレッスン」です。効率的に学習を進めてあなたのイメージを実際に具現化してみませんか?

まずは「無料体験レッスン」で業界随一のコンサルタントから、実際の学習プランや仕事獲得方法、今後のキャリアについてなど相談してみませんか?無料体験レッスンを受講いただいた方には、

  • 「最短1ヶ月で開発ができる学習方法」電子書籍(非売品)
  • 効率的なオリジナル学習カリキュラム
  • Amazonギフト券1000円分


をプレゼントいたします。オンラインでも受講できるのでお気軽に受講下さい。以下のカレンダーから1分程で予約申し込みできます!

まとめ

いかがでしたか?今回はテーブルの削除について、DELETE文、TRUNCATE文、DROP TABLE文をみてきました。

削除と一口に言ってもデータのみの削除だったり、高速全件削除だったり、テーブルそのものの削除だったりといろいろと違いが理解できたのではないかと思います。

テーブルの削除について、振り返る機会があったらまたこの記事を見直してみてください。この記事が皆様のMySQL学習の一助となれば幸いです。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

平山 晃

平山 晃

フリーのエンジニア・ライター。
プログラミング、ライティング、マーケティングなど、あらゆる手段を駆使して、
ハッピーなフルリモートワーカーを目指し中。

最近興味がある分野は深層強化学習。
積みゲー、積ん読がどんどん増加しているのがここ数年の悩み。
実は侍エンジニア塾の卒業生だったりします。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説