データを削除する(DELETE文)

MySQL では DELETE 文を使用することでテーブルに格納されているデータを削除することができます。ここでは MySQL でデータを削除する方法について解説します。 LIMIT 句を使って削除するデータの件数を制限する方法、および ORDER BY句を使って指定の方法でデータを並べ替えてから削除する方法もあわせて解説します。

(Last modified: )

データを削除する

テーブルに格納されているデータを削除するには DELETE 文を使います。書式は次の通りです。

DELETE FROM tbl_name [WHERE where_condition]

指定したテーブル名( table_reference )に格納されているデータを削除します。 WHERE 句を指定しなければテーブルに格納されているすべてのデータが削除されます。特定のデータのカラムの値だけを更新したい場合は WHERE 句を指定してください。

[例] id カラムの値が 10 のデータを削除する
DELETE FROM mytbl WHERE id = 10;

[例]全てのデータを削除する
DELETE FROM mytbl;

なおテーブルのすべてのデータを削除するには TRUNCATE 文を使用することもできます。詳しくは「全てのデータを削除する(TRANCATE TABLE文)」を参照されてください。

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table accesslog (page varchar(20), type varchar(10), dt date);

データを削除する(1)

テーブルには次のようなデータを追加しました。

insert into accesslog values ('top.html', 'direct', '2019-05-02');
insert into accesslog values ('products.html', 'search', '2019-04-24');
insert into accesslog values ('shop.html', 'direct', '2019-05-04');
insert into accesslog values ('top.html', 'search', '2019-03-29');
insert into accesslog values ('corp.html', 'search', '2019-04-18');

データを削除する(2)

現在テーブルに格納されているデータを取得して確認しておきます。

データを削除する(3)

ではテーブルのデータを削除してみます。最初に type カラムの値が 'direct' のデータについて削除します。次のように実行してください。

delete from accesslog where type='direct';

データを削除する(4)

データの削除が完了しました。それではあらためてテーブルの値を取得してみます。

データを削除する(5)

type カラムの値が 'direct' のデータが削除されていることが確認できました。

-- --

次ににテーブルのすべてのデータを削除します。次のように実行してください。

delete from accesslog;

データを削除する(6)

データの削除が完了しました。それではあらためてテーブルの値を取得してみます。

データを削除する(7)

テーブルのすべてのデータが削除されていることが確認できました。

削除するデータの数を指定する(LIMIT句)

DELETE 文ではテーブルに格納されているすべてのデータか、 WHERE 句を設定した場合は条件に一致したすべてのデータを対象に削除を行いますが、一度の DELETE 文で削除するデータの数を LIMIT 句を使って指定することができます。次のような書式を使います。

DELETE FROM tbl_name [WHERE where_condition]
    LIMIT row_count

LIMIT のあとに一度に削除するデータ数の上限を記述します。たとえば上限を 3 に設定した場合、削除の対象となるデータが何件あったとしても、上から順に最大 3 件のデータだけが削除されます。

このあとで解説する ORDER BY 句と合わせて実際に試してみます。

降順または昇順に並び替えてから削除する(ORDER BY句)

DELETE 文でデータを削除するときに、指定したカラムの値を基準に昇順または降順に並び替えた後でデータを削除することができます。次のような書式を使います。

DELETE FROM tbl_name [WHERE where_condition]
    ORDER BY col_name [ASC | DESC]

ORDER BY のあとに記述となるカラム名を指定します。並べ替える方法は ASC を指定した場合は昇順、 DESC を指定した場合は降順で並べ替えを行います。省略した場合は昇順です。

※ あくまで削除を行う時に並べ替えを行うだけで、実際に格納されているデータを並べ替えて格納するわけではありません。

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table accesslog (page varchar(20), type varchar(10), dt date);

LIMIT句およびORDER BY句を使った削除(1)

テーブルには次のようなデータを追加しました。

insert into accesslog values ('top.html', 'direct', '2019-05-02');
insert into accesslog values ('products.html', 'search', '2019-04-24');
insert into accesslog values ('shop.html', 'direct', '2019-05-04');
insert into accesslog values ('top.html', 'search', '2019-03-29');
insert into accesslog values ('corp.html', 'search', '2019-04-18');

LIMIT句およびORDER BY句を使った削除(2)

現在テーブルに格納されているデータを取得して確認しておきます。

LIMIT句およびORDER BY句を使った削除(3)

ではテーブルのデータを削除してみます。テーブルを dt カラムの値を対象に昇順に並べ替えたうえでデータを削除します。削除するデータの上限は 3 件です。次のように実行してください。

delete from accesslog order by dt asc limit 3;

LIMIT句およびORDER BY句を使った削除(4)

データの削除が完了しました。それではあらためてテーブルの値を取得してみます。

LIMIT句およびORDER BY句を使った削除(5)

dt カラムの値が古い日付のものから順に 3 件のデータについてデータが削除されていることが確認できました。

-- --

DELETE 文を使ってデータの削除を行う方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。