データベースの基本操作として、データの「追加」「更新」「削除」「選択」が挙げられます。
本記事では、データの「削除」方法について、基本的な操作からサンプルを交えた具体的な解説までを行っていきたいと思います。
SQLでのデータ削除の基本
SQLでのデータ削除において、最も基本となる「DELETE文」の使い方についてご紹介していきたいと思います。
記述法
最も基本となる記述方法です。
ただし、条件指定せずにDELETE文を記述すると指定したテーブルの対象データが全て削除されますので、注意が必要です。
DELETE FROM テーブル名;
サンプル
実際にサンプルで動作確認してみましょう。
サンプルとして下記のデータを用意しています。
test1
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 30 | | 2 | 山田花子 | 25 | | 3 | 田中一郎 | 20 | +------+--------------+------+
実行するSQL文は下記となります。
DELETE FROM test1;
SELECT文を実行すると下記のように表示されます。
Empty set (0.00 sec)
SQLでのデータ削除 条件指定
では特定のデータだけを削除したい場合、どのように条件指定するのかというと「WHERE句」を利用することになります。
基本的にデータベースでDELETE処理を行う場合には、WHERE句の指定はほぼ必須と考えて問題ありません。
記述法
DELETE文のWHERE句以降の記述方法は、SELECT文の記述方法と同じです。
DELETE FROM テーブル名 WHERE 条件式;
条件式には「=」だけでなく「LIKE」や「BETWEEN」を用いた条件指定も可能です。
サンプル
実際にサンプルデータに条件指定で削除処理を実施してみましょう。
+------+-----------------+------+ | id | name | age | +------+-----------------+------+ | 1 | 山田太郎 | 30 | | 2 | 山田花子 | 25 | | 3 | 田中一郎 | 20 | | 4 | 清水次郎 | 40 | | 5 | 大山田五郎 | 45 | +------+-----------------+------+
今回は苗字が「山田」のデータを削除するSQLを作成しました。
DELETE FROM test1 WHERE name like "山田%";
実行した後のデータを確認すると、苗字が「山田」のデータのみが削除出来ていることをご確認頂けます。
+------+-----------------+------+ | id | name | age | +------+-----------------+------+ | 3 | 田中一郎 | 20 | | 4 | 清水次郎 | 40 | | 5 | 大山田五郎 | 45 | +------+-----------------+------+
SQLでのデータ削除 件数指定
SQLでのデータ削除には件数指定を行うことも可能です。
一般的には「ORDER BY」句との組み合わせにより、古い日付のデータを何件削除するといった用途で利用されます。
記述法
件数指定の記述には「LIMIT句」を利用します。
ORDER BY句に関しては、並び替えを行うために利用されます。
DELETE FROM テーブル名 (ORDER BY カラム名, カラム名 ...) LIMIT 件数;
サンプル
サンプルでは、購入日の古いものから5件のデータを削除するSQLを作成してみましょう。
今回利用するサンプルデータは下記の通りです。
+---------------+-----------------------------+---------+ | purchase_date | product_name | price | +---------------+-----------------------------+---------+ | 2020-08-01 | 靴 | 5000 | | 2020-08-20 | かばん | 10000 | | 2020-08-15 | 服 | 3000 | | 2020-08-10 | コンサートチケット | 6000 | | 2020-08-27 | 商品券 | 3000 | | 2020-08-31 | テレビ | 100000 | | 2020-08-02 | 車 | 1000000 | | 2020-08-23 | 水 | 100 | | 2020-08-17 | 化粧品 | 1500 | | 2020-08-22 | 携帯電話 | 80000 | +---------------+-----------------------------+---------+
SQLは下記となります。
DELETE FROM test1 ORDER BY purchase_date LIMIT 5;
実行した結果、購入日の古い5件のデータが削除されていることをご確認頂けます。
+---------------+--------------+--------+ | purchase_date | product_name | price | +---------------+--------------+--------+ | 2020-08-20 | かばん | 10000 | | 2020-08-27 | 商品券 | 3000 | | 2020-08-31 | テレビ | 100000 | | 2020-08-23 | 水 | 100 | | 2020-08-22 | 携帯電話 | 80000 | +---------------+--------------+--------+
SQLでのデータ全件削除
上述したように、SQLでのデータ全件削除にはDELETE文で条件を指定しないという方法もありますが、一般的には「TRUNCATE文」が利用されます。
DELETE文との違いは、DELETE文がデータ1件1件削除するのに対し、TRUNCATE文ではテーブルを削除し再作成するため、データ量によっては処理スピードが圧倒的に早くなります。
記述法
TRUNCATE文の記述方法は下記となります。
TRUNCATE TABLE テーブル名;
サンプル
ではLIMIT句のサンプルで残ったデータをTRUNCATE文で削除してみましょう。
TRUNCATE TABLE test1;
実行した後にSELECT文を実行すると下記のように表示され、データが削除されたことをご確認頂けます。
Empty set (0.01 sec)
さいごに:SQLでデータを削除する際は細心の注意を払おう!
本記事では、SQLでデータを削除する方法について、DELETE文とTRUNCATE文の使い方をご紹介してきました。
SQLでのデータ削除を行う際には、細心の注意を払った上で実施することが大切です。
データベースから削除したデータは基本的には復元することが出来ません。
バックアップを取得しておくことはもちろん、実行する前に本当に間違いがないかを入念に確認し、処理を実行するように心がけましょう。
今回はMySQLを使用したサンプルを掲載します。
データベース毎にSQLの記述方法が異なることもありますので、利用するデータベースに対応したSQLに適宜読み替えを行ってください。