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

MySQL MySQL

MySQLでテーブルのデータを削除する方法について書いています。
作成したデータベースのテーブルからデータを削除するには、テーブルに対してDELETE文を使うと良いです。

MySQLのバージョン8.0.32で、動作を検証しています。

テーブルからデータを削除する

テーブルからデータを削除するにはDELETEを使います。
例えば、下記のように使うことができます。

DELETE FROM users;

DELETE FROMの後にテーブル名を指定しています。
usersテーブルには下記のデータが入っています。

id name age birthday
1 yasuaki 34 1989-02-06
2 taro 20 2003-01-01
3 hanako 22 2001-01-01
4 jiro 18 2005-01-01

この状態でSQLを実行すると、全てのデータが削除されます。
AUTO_INCREMENTで自動採番している場合には、番号は途中からになるので注意が必要です。(今回の場合には「5」から)

次項では、削除するデータを条件で指定するWHEREを使ってみます。

削除するデータをWHEREで指定する

削除するデータ行をWHEREを使うことで絞ることができます。
例えば、下記のように使います。

DELETE FROM users WHERE id = 2 OR id = 4;

WHEREで削除するデータを絞りました。
こうすると、idが「2」と「4」のデータが対象になります。
id = 2」でidが「2」のデータ、「OR」で「または」となり、「id = 4」でidが「4」データを指定しています。

先ほどの一覧を戻した状態で削除すると、下記のような状態のデータになります。
idが「2」と「4」のデータが削除されました。

id name age birthday
1 yasuaki 34 1989-02-06
3 hanako 22 2001-01-01

削除件数と並び順を指定して削除する

削除する件数と並び順を指定して、指定した並び順の先頭から、指定した件数まで削除することができます。
例えば、先ほどのusersテーブルのデータです。

id name age birthday
1 yasuaki 34 1989-02-06
2 taro 20 2003-01-01
3 hanako 22 2001-01-01
4 jiro 18 2005-01-01

このテーブルの年齢(age)の若い順に2件削除する場合には、下記のようになります。

DELETE FROM users ORDER BY age LIMIT 2;

usersテーブルをORDER BYで年齢(age)を指定して、年齢の昇順に並べます。
そして、LIMITで2件削除するようにしました。

実行結果は、下記のようになります。

id name age birthday
1 yasuaki 34 1989-02-06
3 hanako 22 2001-01-01

年齢の若いデータが2つ削除されました。
このように並び順を指定して、並び順を変えてデータを取得し、先頭から指定した件数分を削除することができます。

テーブルを結合(JOIN)して削除する

テーブルを結合して、対象のデータを削除することもできます。
例えば、下記のような2つのテーブルを用意します。

まず、先ほどのusersテーブルです。

id name age birthday
1 yasuaki 34 1989-02-06
2 taro 20 2003-01-01
3 hanako 22 2001-01-01
4 jiro 18 2005-01-01

そして、ユーザーが投稿したテキストメッセージを保持するmessagesテーブルです。

id user_id text
1 1 test text!!!
2 2 test text123

usersテーブルのidが「1」・「2」に紐づく、投稿データを1件ずつの2件持っています。
この投稿データがあるユーザーを削除する場合には、下記のようにJOINしてDELETEで削除することができます。

DELETE u FROM users AS u 
  JOIN messages AS m ON u.id = m.user_id;

テーブルに別名をつけて、指定してJOINする必要があります。
実行すると、messagesテーブルにはデータが残りますが、usersテーブルは下記のように2件になりました。

id name age birthday
3 hanako 22 2001-01-01
4 jiro 18 2005-01-01

MySQLでテーブルのデータを削除する方法まとめ

今回はMySQLでテーブルのデータを削除する方法について書きました。
記事の内容をまとめると、下記のようになります。

・「`DELETE FROM テーブル名`」でデータを削除することができた。
・WHEREで削除するデータを絞ることができる。
・削除件数と並び順を指定して、データを削除することができた。
・テーブルを結合してデータを削除できた。(別名をつける必要がある)

コメント

タイトルとURLをコピーしました