SQL - TRUNCATE TABLE

こんにちは、データベース愛好家の皆さん!今日は、SQLの中でも最も強力で(時々怖い)コマンドの一つ、TRUNCATE TABLEステートメントについて深く掘り下げます。新しい人でも心配しないでください。基本から始めて、段階的に進めていきます。お気に入りの飲み物を用意して、リラックスして、データ破壊の世界への旅を始めましょう(もちろん、良い意味でです!)。

SQL - Truncate Table

SQL TRUNCATE TABLE ステートメント

TRUNCATE TABLEとは?

TRUNCATE TABLEは、データ定義言語(DDL)のコマンドで、テーブルからすべての行を素早く削除します。テーブルの「リセット」ボタンを押すようなものです。構造はそのままに、中のデータだけを削除します。

基本構文

TRUNCATE TABLEステートメントの基本構文は非常にシンプルです:

TRUNCATE TABLE table_name;

これを分解すると:

  • TRUNCATE TABLE:実際のコマンドです。
  • table_name:空にしたいテーブルの名前に置き換えます。

実世界の例

図書館のデータベースを管理しているとします。現在貸し出されているすべての本を追跡するためのborrowed_booksテーブルがあります。年末にすべての本が返却被ったときに、このテーブルをクリアして新しい年を迎えたいと思います。

这么做的方法は以下の通りです:

TRUNCATE TABLE borrowed_books;

そして、貸し出された本の記録がすべて消えます!魔法の杖を振るようなもので、すべてのデータが消えます。

重要な考慮事項

  1. 元に戻せない:TRUNCATE TABLEを実行したら、元に戻すことはできません。紙をシュレッダーにかけたようなものです!

  2. 速度:TRUNCATE TABLEは、テーブルからすべての行を削除する際、DELETEよりもはるかに速いです。

  3. 自動インクリメントのリセット:テーブルに自動インクリメントカラムがある場合、TRUNCATE TABLEはそれを初期値(通常は1)にリセットします。

  4. 権限:TRUNCATE TABLEを使用するには特別な権限が必要です。このコマンドは軽率に扱うべきではありません!

TRUNCATEとDELETEの比較

「DELETEを使わないで」と思うかもしれません。素晴らしい質問です!これら2つのデータ削除の巨人を比較してみましょう。

比較表

特性 TRUNCATE DELETE
速度 非常に速い 大きなテーブルでは遅い
ログ 最小限のログ 完全にログ
WHERE句 非対応 対応
ロールバック 元に戻せない 元に戻せる
トリガー トリガーを実行しない トリガーを実行する
返り値 削除された行数は返さない 削除された行数を返す

TRUNCATEを使う場合

以下の場合にTRUNCATEを使用します:

  1. テーブルからすべての行を削除したいとき。
  2. 個別の行の削除ログを必要としないとき。
  3. 自動インクリメントカラムをリセットしたいとき。
  4. 性能が重要なとき。

DELETEを使う場合

以下の場合にDELETEを使用します:

  1. 特定の行を削除したいとき(WHERE句を使って)。
  2. 操作を元に戻す必要があるとき。
  3. トリガーを実行したいとき。
  4. 削除された行数を知りたいとき。

コード例

再び図書館のデータベースに戻りましょう。1950年以前に出版されたすべての本を削除したいとします:

DELETEを使った場合:

DELETE FROM books WHERE publication_year < 1950;

TRUNCATEを使う場合(すべての本が1950年以前に出版されている場合):

TRUNCATE TABLE books;

DELETEステートメントは、どの本を削除するかを指定できますが、TRUNCATEはすべての本を削除します。

TRUNCATEとDROPの比較

次に、別のプレイヤーをリングに導入しましょう:DROPコマンド。TRUNCATEとはどのように比較されるのでしょうか?

比較表

特性 TRUNCATE DROP
テーブル構造 保持 削除
速度 非常に速い 快速
データ復旧 難しい バックアップなしでは不可能
権限 ALTER権限が必要 DROP権限が必要
使用ケース データをクリア、構造を保持 すべてを削除

TRUNCATEを使う場合

以下の場合にTRUNCATEを使用します:

  1. テーブルからすべてのデータを素早く削除したいとき。
  2. テーブル構造を保持したいとき。
  3. 即座にテーブルを再利用する予定があるとき。

DROPを使う場合

以下の場合にDROPを使用します:

  1. すべてのテーブル、構造を含めて削除したいとき。
  2. テーブルがもう必要ないとき。
  3. テーブルをからくり直すとき。

コード例

図書館のデータベースを再編成して、新しいbooksテーブルで再始動したいとします:

TRUNCATEを使った場合:

TRUNCATE TABLE books;
-- テーブルは空ですが、まだ存在します

DROPを使った場合:

DROP TABLE books;
-- テーブルは存在しません

TRUNCATEの後は、すぐに新しいデータをbooksテーブルに挿入できます。DROPの後は、データを追加する前にテーブル構造を再作成する必要があります。

結論

そして、皆さん!TRUNCATE TABLEの世界を旅しました。DELETEとDROPとの比較も含めてです。強力なツールですが、責任を持って使用してください。テーブル名を確認した後でEnterキーを押すように!

最後に、データベースの老師としてのアドバイスを。重要なデータベース操作を行う前に、常にバックアップを取るようにしてください。信じてください、私の bacon は何度も救われました!

快適なコーディングをし、データベースは常に効率的に管理されることを願っています!

Credits: Image by storyset