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

広告

テーブルからすべてのデータを削除するには DELETE 文で行うこともできますが、 TRUNCATE TABLE 文を使用するとより高速にデータを削除できる場合があります。 TRUNCATE TABLE 文ではテーブルをいったん削除し、同じ構成のテーブルを作成しなおします。ここでは MariaDB でテーブルからすべてのデータを削除する方法について解説します。

(2021 年 08 月 10 日公開 / 2021 年 08 月 10 日更新)

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

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

TRUNCATE [TABLE] tbl_name
  [WAIT n | NOWAIT]

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

すべてのデータを削除するには DELETE 文を使って DELETE FROM tbl_name でも可能です。ただ DELETE 文がデータを 1 つずつ削除するのに対して、 TRUNCATE TABLE 文の場合はテーブルをいったん削除して改めてテーブルを作成するためテーブルに格納されているデータが非常に多い場合には高速で行える場合があります。

※ DELETE 文については「データを削除する(DELETE文)」を参照されてください。

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

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

insert into user values('Nishi', 30),('Oota', 19),('Suzuki', 24),('Takenaka', 32),('Yoda', 26);

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

user テーブルには 5 つのデータが格納されています。

select * from user;

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

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

truncate table user;

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

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

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

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

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて

テーブルからデータを削除するには DELETE FROM テーブル名 でも実行可能です。ただ先に記載したとおり、 DELETE 文を使用した場合はテーブルからデータを順番に削除するため、大量のデータが格納されている場合には時間がかかる場合があります。

また DELETE 文と TRUNCATE 文でデータを削除した場合の違いとして AUTO_INCREMENT が設定されているカラムの扱いが異なります。 DELETE 文でデータを削除した場合、 AUTO_INCREMENT はリセットされませんので新しいデータを追加すると AUTO_INCREMENT が設定されたカラムには次の値が格納されます。それに対して TRUNCATE 文を使った場合はテーブルをいったん削除して作り直すので AUTO_INCREMENT がリセットされるため新しいデータを追加すると AUTO_INCREMENT が設定されたカラムには 1 が格納されます。

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

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

insert into user (name) values('Nishi'),('Oota'),('Suzuki');

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(1)

user テーブルには 3 つのデータが格納されています。

select * from user;

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(2)

まず DELETE 文を使ってテーブルのデータをすべて削除してみます。次のように実行してください。データを削除したあとに確認してみるとデータがすべて削除されていることが確認できます。

delete from user;

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(3)

あらためてデータを 1 つ追加します。そしてテーブルからデータを取得してみます。

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

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(4)

DELETE 文では AUTO_INCREMENT はリセットされませんので、新しく追加したデータの中で AUTO_INCREMENT が設定された id カラムの値には 4 が格納されています。

次に TRUNCATE 文を試してみます。先ほどのテーブルにデータを 2 つ追加しました。

insert into user (name) values('Kubo'),('Eda');

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(5)

TRUNCATE 文を使ってテーブルのデータをすべて削除してみます。次のように実行してください。データを削除したあとに確認してみるとデータがすべて削除されていることが確認できます。

truncate table user;

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(6)

あらためてデータを 1 つ追加します。そしてテーブルからデータを取得してみます。

insert into user (name) values('Gotou');

DELETE文とTRUNCATE文でデータを削除した場合のAUTO_INCREMENTの扱いについて(7)

TRUNCATE 文ではテーブルを作成しなおすため AUTO_INCREMENT はリセットされます。そのため、新しく追加したデータの中で AUTO_INCREMENT が設定された id カラムの値には 1 が格納されています。

このように DELETE 文と TRUNCATE 文でテーブルのすべてのデータを削除した場合、 AUTO_INCREMENT の扱いが異なりますので注意してください。

-- --

MariaDB でテーブルからすべてのデータを削除する方法について解説しました。

( Written by Tatsuo Ikura )

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

著者 / TATSUO IKURA

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