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で削除するデータを絞ることができる。
・削除件数と並び順を指定して、データを削除することができた。
・テーブルを結合してデータを削除できた。(別名をつける必要がある)
コメント