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

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

(Last modified: )

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

テーブルに格納されたデータをすべて削除するには 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 )

プロフィール画像

著者 / TATSUO IKURA

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