MySQLですべてのデータを削除する「TRUNCATE」

MySQLでテーブル内のすべてのデータを削除するTRUNCATE文について説明します。

TRUNCATE文の使い方

TRUNCATE文の書式は以下の通りです。

TRUNCATE TABLE テーブル名;

削除したいテーブル名を指定します。TRUNCATE文を使用するにはコマンドを使用する場合にはDROP権限が必要です。DELETE権限では実行できないので、注意してください。

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

以下はuserテーブルのデータをすべて削除する例です。

mysql > TRUNCATE TABLE user;
Query OK, 0 rows affected (0.01 sec)

TRUNCATEとDELETEの違い

テーブル内の全データを削除するというのはDELETE文でも行うことができます。

DELETE FROM テーブル名;

しかし、すべてのデータを削除する場合にはTRUNCATE文を使う方が効率的です。

削除の仕方の違い

DELETE文は一行ずつ削除していくのに対し、TRUNCATE文では一度テーブル自体を削除(DROP)して再度空のテーブルを作り直します。そのため、DELETE文よりTRUNCATE文の方が高速でデータを削除できます。

結果表示の違い

削除の仕方の違いに伴い、DELETE文は削除された行の行数を返しますが、TRUNCATE文は「0 rows」と表示されます。

DELETE文の場合

mysql > DELETE FROM user;
Query OK, 10000 rows affected (0.01 sec)

TRUNCATE文の場合

mysql > TRUNCATE TABLE user;
Query OK, 0 rows affected (0.00 sec)

AUTO_INCREMENTの違い

カラムの値にAUTO_INCREMENTを設定している場合、DELETE文では値がそのまま引き継がれますが、TRUNCATE文では0に初期化されます。

ロールバックの違い

DELETE文はロールバックができるのに対し、TRUNCATE文は暗黙なコミットなのでロールバックができません。


イベント