全てのデータを削除する(TRUNCATE TABLE文)

MySQL では TRUNCATE TABLE 文を使用することでテーブルに格納されているデータをすべて削除することができます。ここでは MySQL ですべてのデータを削除する方法について解説します。 DELETE 文を使って削除する場合との違いについても解説します。

(Last modified: )

すべてのデータを削除する

テーブルに格納されたデータをすべて削除するには TRUNCATE TABLE 文を使用します。書式は次の通りです。

TRUNCATE [TABLE] tbl_name

指定したテーブル名( table_reference )に格納されているデータをすべて削除します。

全てのデータを削除するには DELETE 文を使って DELETE FROM tbl_name でも同様のことが行えます。ただ DELETE 文がデータを 1 つずつ削除するのに対して、 TRUNCATE TABLE 文の場合はテーブルをいったん削除して改めてテーブルを作成するためテーブルに格納されているデータが非常に多い場合には高速で行える場合があります。また他にも異なる点があるのでのちほど解説します。DELETE 文については「データを削除する(DELETE文)」を参照されてください。

-- --

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

create table user (id int, name varchar(10));

すべてのデータを削除する(1)

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

insert into user values (1, 'Yamada');
insert into user values (2, 'Suzuki');
insert into user values (3, 'Honda');
insert into user values (4, 'Kuwata');

すべてのデータを削除する(2)

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

すべてのデータを削除する(3)

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

truncate table user;

すべてのデータを削除する(4)

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

すべてのデータを削除する(5)

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

データを削除したあとAUTO_INCREMENTがリセットされる

テーブルのカラムに AUTO_INCREMENT が設定されていた場合、 TRUNCATE TABLE でデータを削除すると AUTO_INCREMENT で次に自動で設定される値がリセットされて 1 から再び始まります。それに対して DELETE 文でデータを削除した場合には AUTO_INCREMENT はリセットされません。

実際に試してみます。最初に TRUNCATE TABLE でデータを削除した場合です。次のようなテーブルを作成しました。

create table user(id int auto_increment, name varchar(10), index(id));

データを削除したあとAUTO_INCREMENTがリセットされる(1)

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

insert into user (name) values ('Yamada');
insert into user (name) values ('Suzuki');
insert into user (name) values ('Honda');

データを削除したあとAUTO_INCREMENTがリセットされる(2)

id カラムには AUTO_INCREMENT が設定されているので、 1, 2, 3, ... と順番に値が格納されています。

それではいったんテーブルに含まれるすべてのデータを削除します。次のように実行してください。テーブルのデータを取得してみると、すべてのデータが削除されていることが確認できます。

truncate table user;

データを削除したあとAUTO_INCREMENTがリセットされる(3)

ここであらためてデータを追加していきます。 TRUNCATE TABLE 文でテーブルのデータを削除した場合には AUTO_INCREMENT がリセットされるので、 AUTO_INCREMENT が設定されている id カラムには 1, 2, 3, ... と順番に値が格納されています。

insert into user (name) values ('Yamada');
insert into user (name) values ('Suzuki');
insert into user (name) values ('Honda');

データを削除したあとAUTO_INCREMENTがリセットされる(4)

-- --

では次に DELETE 文でデータを削除した場合です。現在テーブルにデータが3つ格納されていますので、次のように DELETE 文を使ってデータをすべて削除します。テーブルのデータを取得してみると、すべてのデータが削除されていることが確認できます。

delete from user;

データを削除したあとAUTO_INCREMENTがリセットされる(5)

ここであらためてデータを追加していきます。 DELETE 文でテーブルのデータを削除した場合には AUTO_INCREMENT がリセットされませんので、 AUTO_INCREMENT が設定されている id カラムには今までテーブルに格納された id カラムの一番大きい値が 3 でしたので 4, 5, 6, ... と順番に値が格納されています。

insert into user (name) values ('Yamada');
insert into user (name) values ('Suzuki');
insert into user (name) values ('Honda');

データを削除したあとAUTO_INCREMENTがリセットされる(6)

TRUNCATE TABLE 文でデータを削除した場合と DELETE 文でデータを削除した場合で AUTO_INCREMENT の扱いの違いについて解説しました。

DELETEトリガーが起動しない

テーブル DELETE トリガーが設定されていた場合、 DELETE 文を使ってデータを削除した場合にはトリガーが起動しますが、RUNCATE TABLE 文でデータを削除した場合にはトリガーが起動しません。(トリガーについては「トリガーの作成」を参照されてください)。

実際に試してみます。次のようなテーブルを作成しました。データも2つ追加してあります。

create table user(id int, name varchar(10));

insert into user values(1, 'Yamada');
insert into user values(2, 'Suzuki');

DELETEトリガーが起動しない(1)

トリガーの記録用のテーブルを作成しました。

create table log(log varchar(20), dt datetime);

DELETEトリガーが起動しない(2)

user テーブルを対象に次のような DELETE トリガーを作成しました。

create trigger delete_trigger after delete on user for each row insert into log (log, dt) values('Delete', now());

DELETEトリガーが起動しない(3)

-- --

では最初に DELETE 文でデータを削除した場合です。次のように DELETE 文を使ってデータをすべて削除します。

delete from user;

DELETEトリガーが起動しない(4)

トリガーの記録用の log テーブルからデータを取得してみると、 user テーブルのデータを 1 つ削除するごとに DELETE トリガーが起動したことが確認できます。

select * from log;

DELETEトリガーが起動しない(5)

-- --

次に TRUNCATE TABLE 文でデータを削除した場合です。 user テーブルにあらためて 2 つデータを追加しておきます。

insert into user values(1, 'Yamada');
insert into user values(2, 'Suzuki');

DELETEトリガーが起動しない(6)

では TRUNCATE TABLE 文を使ってデータをすべて削除します。

truncate table user;

DELETEトリガーが起動しない(7)

トリガーの記録用の log テーブルからデータを取得してみると、 log テーブルが delete from user を実行した時に記録されたデータから増えておらず TRUNCATE TABLE 文を実行しても DELETE トリガーが起動していないことが確認できます。

select * from log;

DELETEトリガーが起動しない(8)

このように TRUNCATE TABLE 文を使ってテーブルのデータをすべて削除した場合には DELETE トリガーが起動しない点について注意してください。

-- --

TRUNCATE TABLE 文を使ってテーブルのデータをすべて削除する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。