全データの削除
テーブルに含まれる全データを削除する場合に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));
テーブルにはデータを次のように格納しておきます。
ではTRUNCATE文を使って全データを削除します。
mysql> truncate table user;
全データが削除されていることが確認できます。
続いてデータを1行追加し、データを取得してみます。
AUTO_INCREMENTが初期化されているため、TRUNCATE文を実行後にデータを追加するとAUTO_INCREMENTが設定されたカラムの値はまた初期値から開始されます。
*** ***
今度はDELETE文を使ってみます。先ほどの状態から2件データを追加します。
ではDELETE文を使って全データを削除します。
mysql> delete from user;
全データが削除されていることが確認できます。
続いてデータを1行追加し、データを取得してみます。
単にデータが削除された場合ではAUTO_INCREMENTは初期化されません。その為。データを追加するとAUTO_INCREMENTが設定されたカラムには次に使用される値として設定されていた4が格納されます。
( Written by Tatsuo Ikura )