MySQLでテーブル内のすべてのデータを削除するTRUNCATE文について説明します。
TRUNCATE文の使い方
TRUNCATE文の書式は以下の通りです。
1 |
TRUNCATE TABLE テーブル名; |
削除したいテーブル名を指定します。TRUNCATE文を使用するにはコマンドを使用する場合にはDROP権限が必要です。DELETE権限では実行できないので、注意してください。
すべてのデータを削除する
以下はuserテーブルのデータをすべて削除する例です。
1 2 |
mysql > TRUNCATE TABLE user; Query OK, 0 rows affected (0.01 sec) |
TRUNCATEとDELETEの違い
テーブル内の全データを削除するというのはDELETE文でも行うことができます。
1 |
DELETE FROM テーブル名; |
しかし、すべてのデータを削除する場合にはTRUNCATE文を使う方が効率的です。
削除の仕方の違い
DELETE文は一行ずつ削除していくのに対し、TRUNCATE文では一度テーブル自体を削除(DROP)して再度空のテーブルを作り直します。そのため、DELETE文よりTRUNCATE文の方が高速でデータを削除できます。
結果表示の違い
削除の仕方の違いに伴い、DELETE文は削除された行の行数を返しますが、TRUNCATE文は「0 rows」と表示されます。
DELETE文の場合
1 2 |
mysql > DELETE FROM user; Query OK, 10000 rows affected (0.01 sec) |
TRUNCATE文の場合
1 2 |
mysql > TRUNCATE TABLE user; Query OK, 0 rows affected (0.00 sec) |
AUTO_INCREMENTの違い
カラムの値にAUTO_INCREMENTを設定している場合、DELETE文では値がそのまま引き継がれますが、TRUNCATE文では0に初期化されます。
ロールバックの違い
DELETE文はロールバックができるのに対し、TRUNCATE文は暗黙なコミットなのでロールバックができません。