第3章 SQL構文

DELETE構文:TRUNCATE構文でデータを削除する

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 が有効である限り、データやインデックスのファイルが破損しても、この方法でテーブルを再作成できます。

 

関連記事