すべてのデータを削除する(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);
user テーブルには 5 つのデータが格納されています。
select * from user;
それでは user テーブルのデータをすべて削除します。次のように実行してください。
truncate table user;
すべてのデータの削除が完了しました。それでは確認のためにあらためて user テーブルのデータを取得してみます。
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');
user テーブルには 3 つのデータが格納されています。
select * from user;
まず DELETE 文を使ってテーブルのデータをすべて削除してみます。次のように実行してください。データを削除したあとに確認してみるとデータがすべて削除されていることが確認できます。
delete from user;
あらためてデータを 1 つ追加します。そしてテーブルからデータを取得してみます。
insert into user (name) values('Honda');
DELETE 文では AUTO_INCREMENT はリセットされませんので、新しく追加したデータの中で AUTO_INCREMENT が設定された id カラムの値には 4 が格納されています。
次に TRUNCATE 文を試してみます。先ほどのテーブルにデータを 2 つ追加しました。
insert into user (name) values('Kubo'),('Eda');
TRUNCATE 文を使ってテーブルのデータをすべて削除してみます。次のように実行してください。データを削除したあとに確認してみるとデータがすべて削除されていることが確認できます。
truncate table user;
あらためてデータを 1 つ追加します。そしてテーブルからデータを取得してみます。
insert into user (name) values('Gotou');
TRUNCATE 文ではテーブルを作成しなおすため AUTO_INCREMENT はリセットされます。そのため、新しく追加したデータの中で AUTO_INCREMENT が設定された id カラムの値には 1 が格納されています。
このように DELETE 文と TRUNCATE 文でテーブルのすべてのデータを削除した場合、 AUTO_INCREMENT の扱いが異なりますので注意してください。
-- --
MariaDB でテーブルからすべてのデータを削除する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。