データベースのテーブルのデータを一括で削除(DELETE)するTRUNCATE

データベースのテーブルの行(レコード)は、DELETE文を使って削除することができます。

テーブルの行をすべて削除する際は、DELETEに続けてテーブル名を指定することで削除できます。

DELETE文を使用してレコードを全件削除してもいいのですが、データベースにはDELETE文以外にもテーブルのデータを一括で削除する方法が用意されています。

そこで今回は、テーブルの全行を一括で削除することができる「TRUNCATE TABLE文」をご紹介します。

全行(全レコード)を削除するテーブルの準備

TRUNCATE TABLE文を使用して、すべての行を削除するためのサンプルテーブルとして、ここでは野菜の情報を管理する「野菜」マスタテーブルを作成します。

野菜マスタテーブルの列定義

野菜マスタテーブルの列定義は、以下のようにします。

列名 データ型 主キー
ID int
名前 varchar(20)
フリガナ varchar(20)
漢字 varchar(20)
英語 varchar(40)

野菜マスタテーブルを作成するCREATE文

野菜マスタテーブルを作成するCREATE文のSQLは、次のようになります。

野菜マスタテーブルのデータ

野菜マスタテーブルにはサンプルとして、下記のデータを登録します。

ID 名前 フリガナ 漢字 英語
1 にんじん ニンジン 人参 carrot
2 きゅうり キュウリ 胡瓜 cucumber
3 たまねぎ タマネギ 玉葱 onion
4 かぼちゃ カボチャ 南瓜 pumpkin
5 だいこん ダイコン 大根 Japanese radish
6 なす ナス 茄子 eggplant

野菜マスタテーブルにレコードをINSERTするSQL

野菜マスタテーブルに登録するサンプルデータのINSERT文も以下に記載しておきます。

上記の野菜マスタテーブルへのデータのインサートは、複数のレコードを1回のSQLで一括挿入する形式で記述しています。
1回のINSERTで複数行のレコードをテーブルに一括で挿入する方法については、以下の記事を参照してください。

1回のINSERT(インサートSQL)で複数行のレコードを一括挿入(追加)する
SQLServerやMySQLなどのデータベースで、テーブルにレコードをINSERT文使用して追加するには、通常は以下のように記述します。 ...

TRUNCATE TABLE文でのレコードの削除

TRUNCATE TABLE文の構文は以下のようになります。

TRUNCATE TABLE文はとても簡単です。
「TRUNCATE TABLE」と記述した後にスペース文字列を入れて、すべてのレコードを削除するテーブル名を指定するだけです。

サンプルテーブルの野菜マスタテーブルの全レコードを削除するSQLも掲載しておきます。

DELETE文とTRUNCATE TABLE文の違いについて

DELETE文ではWHERE句で指定した行(削除対象とする行)のみ削除できますが、TRUNCATE TABLE文では、必ずテーブルにあるすべての行が削除されます。

一般的にTRUNCATE TABLE文では、DELETE文でレコードを削除するよりも高速で処理を行うことができます。
これはログ(削除した記録)を残さずにレコードを削除するからです。
ログを残さずに削除するということは、ロールバック(削除の取り消し)ができないことを意味しています。
TRUNCATE TABLE文はログを残さずに、トランザクション外で処理が行われるため、ロールバックができないようになっています。
ただしSQLServerでは、TRUNCATE TABLE文でもトランザクションをかけることができるので、ロールバックすることが可能になっています。