DELETEは、行を削除する際に使用します。構文自体はとシンプルですが、その操作には注意が必要です。一度削除したデータは元に戻すことができません。
DELETE構文
DELETEは、レコードを削除するための構文で、すべてのレコードを削除、もしくは条件式を満たす特定のレコードだけを削除することができます。使い方は、FROM句に対象となるテーブル名を指定し、特定のレコードのみを削除する場合はWHERE句に条件式を設定します。 DELETEはレコードを削除した後、削除したレコード数を返します。
WHERE句を省略してDELETEを発行した場合、全てのレコードが削除されるので、注意が必要です。
単一テーブル構文
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM テーブル名
[WHERE 条件式]
[ORDER BY ...]
[LIMIT rows]
複合テーブル構文
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
テーブル名[.*] [テーブル名[.*] ...]
FROM
テーブル参照
[WHERE 条件式]
DELETE構文のキーワード
パラメータ | 説明 |
---|---|
LOW_PRIORITY | テーブルを利用するクライアントがなくなるまで待ってから、DELETEを実行します。 |
QUICK | DELETE処理の間、インデックスのマージを行わないので、処理速度が向上します。 |
WHERE | 条件式にマッチするレコードを選択します。 |
ORDER BY | 指定された順序でレコードを更新します。 |
LIMIT -MYSQL拡張 |
削除するレコード数を指定します。 |
DELETEの基本的な使い方
DELETEで削除のテストができるように、削除用のテーブルを作成します。
CREATE TABLE test ( id tinyint(3) unsigned NOT NULL auto_increment, name varchar(30), PRIMARY KEY (id) ); INSERT test SET name='A'; INSERT test SET name='B'; INSERT test SET name='C';
削除用テーブル
ID(id) | 名称(name) |
---|---|
1 | A |
2 | B |
3 | C |
レコードの削除
任意のレコードを削除するには、WHERE句に条件式を設定します。
次のクエリは、商品テーブルから1レコードを削除しています。WHERE句で削除するレコードの[商品ID(id_g)]を指定していることに注目してください。
DELETE FROM goods WHERE id_g = 2;
削除後のテーブル
ID(id) | 名称(name) |
---|---|
1 | A |
3 | C |
WHEREを省略するとすべてのレコードが削除されます。
DELETE FROM goods;
ORDER BYを使ったレコードの削除
先頭から何件かを削除したい場合などに、ORDER BYとLIMITの組み合わせが役に立ちます。
次のクエリは、日付の古いものから10件のデータを削除します。
DELETE FROM goods ORDER BY add_time LIMIT 10;
TRUNCATE構文
TRUNCATE構文は、テーブルを削除し、再作成します。この操作は、レコードを1つずつ削除するよりはるかに迅速に処理されます。削除されたレコード数は返されません。
TRUNCATE構文
TRUNCATE TABLE テーブル名
テーブル定義ファイル table_name.frm が有効である限り、データやインデックスのファイルが破損しても、この方法でテーブルを再作成できます。