DELETE クエリ
DELETE クエリは、記録されたテーブルの行データを削除するためのコマンドです。SQLの基本となるコマンドのひとつです。
基本的には WHERE 句を使って特定の行を削除するようにします。WHERE 句で行を指定しないとすべて削除してしまうので十分に注意してください。
DELETE FROM table_name WHERE id='001';
間違って削除してしまわないように ROLLBACK といった対処方法があります。ただし、ROLLBACK するためにはポイントを設定しておく必要がありますので、やはり削除には十分に注意してください。
バックアップなどの事前対処をしておいたほうが無難でしょう。
この例は table_name というテーブルに記録されている WHERE で抽出した行を削除します。
クエリとは、問い合わせ
を意味し、データベースではデータの検索( SELECT )、入力( INSERT )、更新( UPDATE )、削除( DELETE )といった命令をサーバーに送る行為を指します。
クエリには、作成( CREATE )、変更( ALTER )、削除( DROP )も含みます。
ページ内 Index
構文(Syntax)
DELETE 文はデータベースに記録されたデータを削除する SQL 文です。
通常は WHERE によって特定のデータを削除するようにします。
DELETE FROM table_name WHERE id = 1;
データベースによって DELETE の仕様は異なります。
MySQL
MySQL での DELETE 文は以下のような仕様になっています。
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias] [PARTITION (partition_name [, partition_name] ...)] [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
PostgreSQL
PostgreSQL では以下のうような仕様になっています。
DELETE FROM [ ONLY ] table [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
句について
DELETE 文はいくつかの句で構成されています。例えば以下のような句があります。
句
はデータベースによって節
、文節
とも呼ばれます。Oracle では節
、MySQLやPostgreSQL では句
と呼ばれることが多いようです。
このサイトでは句
と呼ぶようにしています。
DELETE 句
簡単な DELETE 文は、以下のように削除するデータがあるテーブルを指定した SQL 文です。
ただし、WHERE 句がないと全てのデータを削除してしまいますので十分に注意してください。
DELETE FROM table_name;
特に既にデータがある場合は十分注意してください。すべてのデータを削除してしまいます。データが戻せるように、ロールバックポイントを作成しておいた方がよいでしょう。
例えば、以下のような sales_slip テーブルの 指定した id の date_time を現在の日時に変更するには以下のようにします。
DELETE FROM sales_slip WHERE id = 1; Query OK, 1 row affected (0.01 sec)
DELETE されているかを確かめるには SELECT クエリを実行します。
SELECT * FROM sales_slip WHERE id = 1; Empty set (0.00 sec)
ここの例で主に使用しているデータはテーブル
ページの外部キー制約( FOREIGN KEY )
の作成例です。
以下のようなデータを使用しています。
SELECT * FROM goods; +----+----------------+------------+ | id | name | unit_price | +----+----------------+------------+ | 1 | candy | 3 | | 2 | snack | 5 | | 3 | chocolate | 8 | | 4 | ice | 8 | | 5 | lollipop candy | 15 | +----+----------------+------------+ ... select * from sales_slip; +----+---------------------+----------+------------+--------+ | id | date_time | goods_id | unit_price | amount | +----+---------------------+----------+------------+--------+ | 1 | 2023-09-26 22:29:57 | 1 | 3 | 100 | | 2 | 2023-09-26 22:29:58 | 2 | 8 | 50 | | 3 | 2023-09-28 22:42:10 | 2 | 5 | 30 | | 4 | 2023-09-28 22:42:10 | 1 | 5 | 80 | | 5 | 2023-09-28 22:42:53 | 3 | 10 | 10 | +----+---------------------+----------+------------+--------+ ...
WHERE 句
条件を指定して検索して取得する場合は WHERE 句を加えます。
DELETE FROM table_name WHERE id <= 100;
上記の例は id が 100 以下のレコードを検索して削除します。
LIMIT 句
LIMIT 句は、検索されたレコードから指定された数の行のみを削除します。
DELETE FROM table_name LIMIT 2;
上記の例では、検索された順で 2 行までを削除対象とします。レコードが 2 行に満たない場合は検索されたすべての行を削除します。
取得する行数の開始位置は OFFSET 句で指定します。例えば、2 行目から 4 行分を取得するには以下のようにします。
DELETE FROM table_name LIMIT 2 OFFSET 2;
