LINEで現役エンジニアに直接質問してみよう!登録無料

MySQLでテーブルのレコード(データ)を削除する(DELETE)

テーブルのレコード(データ)を削除するには「DELETE」コマンドを使います。

mysql> DELETE FROM users WHERE id = 2;
Query OK,
1 row affected (0.01 sec)
MEMO

レコードとは、テーブルの行方向のデータの事です。詳しくは下記記事で解説しています。

MySQLのデータベース用語をまとめて解説!テーブル/カラム/レコード/フィールド

DELETEの基本

下記コマンドでレコードを削除します。

DELETE FROM テーブル名 WHERE 条件;
MEMO

条件とは、「id = 2(idがが2だったら)」「email = '[email protected]'(emailが[email protected]だったら)」などのレコードを特定する文字列のことです。

また、「条件」のことを別名「条件式」と言ったりもします。

DELETEを実行してみる

レコードを追加するには、事前に下記の4操作を実行してテーブルを作成しておく必要があります。

CREATE DATABASE sampleapp_development;
USE sampleapp_development;
CREATE TABLE users (id INT, email VARCHAR(255), password VARCHAR(255));
INSERT INTO users (id, email, password) VALUES
(1, '[email protected]', '[email protected]'),
(2, '[email protected]', '[email protected]'),
(3, '[email protected]', 'hoge'),
(4, '[email protected]', 'fuga');

それでは、テーブルからレコードを削除してみましょう!

まず、削除前のデータを見てみましょう!後で、削除後のデータと比較します。

mysql> SELECT * FROM users;
+------+---------------------+----------+
| id   | email               | password |
+------+---------------------+----------+
|    1 | [email protected] | [email protected] |
|    2 | [email protected]  | [email protected] |
|    3 | [email protected]   | hoge     |
|    4 | [email protected]  | fuga     |
+------+---------------------+----------+
4 rows in set (0.00 sec)

次に、id = 2のデータを削除してみます。

mysql> DELETE FROM users WHERE id = 2;
Query OK,
1 row affected (0.01 sec)

もう一度データを確認してみると、たしかにid = 2passwordカラム削除されていますね!

mysql> SELECT * FROM users;
+------+---------------------+----------+
| id   | email               | password |
+------+---------------------+----------+
|    1 | [email protected] | [email protected] |
|    3 | [email protected]   | hoge     |
|    4 | [email protected]  | fuga     |
+------+---------------------+----------+
3 rows in set (0.00 sec)

ここまでが「DELETE」の基本です。

この後は、条件にあったレコードを一括して削除する方法や、レコードを一括削除する方法など深い知識を解説していきます。

条件にあったレコードを一括して削除する方法

条件にあったレコードを削除するには、WHEREの条件を変更します。

先程は=(イコール)を使ってidが2の場合のみのレコードを削除しましたが、<=(数学的には。SQLだと<=のように書く)のような不等式を使うことが出来ます。

IDが3以上のデータを一括削除する

idが3以上のデータを削除するには、下記のようなSQLを使います。

mysql> DELETE FROM users WHERE id >= 3;
Query OK,
2 rows affected (0.03 sec)

実行すると、このように3以上のデータが消えています。

mysql> SELECT * FROM users;
+------+---------------------+----------+
| id   | email               | password |
+------+---------------------+----------+
|    1 | [email protected] | [email protected] |
+------+---------------------+----------+
1 row in set (0.00 sec)

レコードを一括削除する方法

全てのデータを一括して削除したい場合、WHEREで条件を書きません。

例えば、下記のように書くと、データが一括して削除されます。

mysql> DELETE FROM users;
Query OK,
1 row affected (0.00 sec)

実行すると、このように全てのデータが消えています。

mysql> SELECT * FROM users;
Empty set (0.01 sec)
注意

条件式を書かないという簡単さから、間違って実行してしまうこともあります。
削除した後はデータの復旧は出来ないので、SQLコマンドを実行する際は慎重に作業しましょう!

一度、「SELECT + WHERE」で実行結果を確認した後、DELETE作業に移ると間違いを少なく出来ます。

まとめ

  • データを削除するにはDELETE FROM テーブル名 WHERE 条件;を使います
  • 条件とは、id = 2などレコードを特定するものです
  • 条件には=(イコール)の他に<=(小なりイコール)や>=(大なりイコール)などを使うことができます
  • レコードを一括削除するにはWHERE 条件をつけません
  • レコードの一括削除は間違えやすいので注意しましょう!

以上、テーブルのレコード削除方法をアキ(@hackablejp)が解説しました!

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。