全データの削除

広告

テーブルに含まれる全データを削除する場合にTRUNCATE文が用意あれています。次の書式を使います。

TRUNCATE TABLE tbl_name;

指定のテーブルに含まれる全データを削除します。

全データを削除するのであれば「DELETE FROM tbl_name」でも同様のことが行えます。

DELETE FROM tbl_name;

2つの違いは「DELETE FROM tbl_name」がデータを1つ1つ削除するのに対して「TRUNCATE TABLE tbl_name」はいったん「DROP TABLE tbl_name」を行った上で再度同じテーブルを作成する点にあります。データを1つ1つ削除するよりもテーブルそのものを削除して作り直すほうが多くの場合高速です。

また次の点でも違いがあります。

テーブルがInnoDB型の場合で、外部参照の親テーブルとなっている場合には「TRUNCATE TABLE tbl_name」を実行すると「DELETE FROM tbl_name」を使ってデータの削除が行われます。この場合、子テーブルにおいてON DELETE句が呼び出されます。MyISAM型の場合にはテーブルの削除を使ってデータが削除されるためて子テーブルのON DELETE句は呼び出されません。

AUTO_INCREMENTが設定されているカラムが含まれていた場合、TRUNCATE文を使って全データの削除が行われるとAUTO_INCREMENTの値が初期化されます。これはInnoDB型で外部参照の親テーブルとなっている場合も同じように初期化されます。

実際には次のように使用します。

TRUNCATE TABLE uriage;

「uriage」テーブルの全データが削除されます。

サンプル

実際に試してみます。まず次のようなテーブルを作成します。

mysql> create table user(id int auto_increment, name varchar(20), index(id));

p12-1

テーブルにはデータを次のように格納しておきます。

p12-2

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

mysql> truncate table user;

p12-3

全データが削除されていることが確認できます。

続いてデータを1行追加し、データを取得してみます。

p12-4

AUTO_INCREMENTが初期化されているため、TRUNCATE文を実行後にデータを追加するとAUTO_INCREMENTが設定されたカラムの値はまた初期値から開始されます。

*** ***

今度はDELETE文を使ってみます。先ほどの状態から2件データを追加します。

p12-5

ではDELETE文を使って全データを削除します。

mysql> delete from user;

p12-6

全データが削除されていることが確認できます。

続いてデータを1行追加し、データを取得してみます。

p12-7

単にデータが削除された場合ではAUTO_INCREMENTは初期化されません。その為。データを追加するとAUTO_INCREMENTが設定されたカラムには次に使用される値として設定されていた4が格納されます。

( Written by Tatsuo Ikura )