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

広告
eyecatch

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

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

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

TRUNCATE [TABLE] tbl_name

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

全てのデータを削除するには DELETE 文を使って DELETE FROM tbl_name でも同様のことが行えます。ただ DELETE 文がデータを 1 つずつ削除するのに対して、 TRANCATE 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 文を使ってテーブルのデータをすべて削除する方法について解説しました。

MySQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。