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でテーブルのデータを削除する方法について書きました。
記事の内容をまとめると、下記のようになります。
・WHEREで削除するデータを絞ることができる。
・削除件数と並び順を指定して、データを削除することができた。
・テーブルを結合してデータを削除できた。(別名をつける必要がある)

コメント