.NET開発者のためのブログメディア
MySQLのDELETEとは?DELETEで消すレコードの条件指定方法を解説!
- SE
- DELETEを使ったデータ消去方法について教えてください。
- PM
- 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
オートコミットモードを解除するとタイミングの良い所でコミットをする必要がありますが、活用してみましょう。
- SE
- やり直しが効かない作業なので、細心の注意が必要ですね。
- PM
- そうですね。また、様々な消去の方法を紹介しましたので、ぜひマスターしてください。
MySQLのDELETEは注意して行おう
MySQLのDELETEについて解説しましたが、ご理解頂けましたでしょうか。DELETEは削除を行うコマンドなので、ミスをすると取り返しがつかなくなります。DELETEを行うときは細心の注意を払いながら行いましょう。
Search キーワード検索
Popular 人気の記事
-
.NET Framework 3.5をWindows10にインストールする方法
2019年10月24日 -
EdgeとChromeはどう違う?それぞれのスペック7つを比較解説!
2020年09月28日 -
【VB.NET入門】DataGridViewの使い方まとめ
2019年12月22日 -
VB.NETをおすすめする3つの理由とは?VBAとの違いや勉強方法を解説
2019年12月21日 -
Windows10のテキストエディタおすすめ20選!選ぶポイント3つ
2020年04月28日
reccomended おすすめ記事
-
C#のusingステートメントでリソースの解放【Disposeとの違いとは】
2020年03月17日 -
【SQL Serverログの操作】トランザクションログの使用量を確認する方法
2020年03月16日 -
【.NETが統合】.NET 5の概要と今後のリリース予定
2020年03月05日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
OutSystemsでの運用、開発/東京都品川区/【WEB面談可】/リモートワーク
月給55万~55万円東京都品川区(大崎駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/リモートワーク
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/リモートワーク
月給41万~50万円神奈川県横浜市(桜木町駅) -
防犯カメラ映像の監視システム設計、開発/神奈川県横浜市/【WEB面談可】/フルリモート
月給67万~67万円神奈川県横浜市(みなとみらい駅) -
製造業の作図システム開発/東京都千代田区/【WEB面談可】/リモートワーク
月給50万~50万円東京都千代田区(岩本町駅)