0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TRUNCATE はロールバックできる?できない?主要DBまとめ

Last updated at Posted at 2025-08-30

はじめに

業務でテーブルを空にしたいときに使う TRUNCATE
でも「これってロールバックできるの?」と疑問に思ったことはありませんか。

実は、データベースによって挙動が違います。
本記事では、有名なDBに絞って挙動を整理します。

主要DBごとの挙動

PostgreSQL

  • ロールバック可能
  • TRUNCATE もトランザクション制御下に入るため、BEGIN … ROLLBACK で元に戻せます。
  • RESTART IDENTITY でシーケンス初期化も可能(これもロールバック対象)。

SQL Server

  • ロールバック可能
  • BEGIN TRAN; TRUNCATE TABLE ...; ROLLBACK; で戻せます。
  • ただし外部キー参照があると実行不可。

MySQL / MariaDB

  • ロールバック不可
  • 内部的に DROP + CREATE 相当の挙動。
  • 暗黙コミットが走るため、ロールバックできません。

Oracle Database

  • ロールバック不可
  • DDLは基本的に即時コミットされる仕様。
  • DELETE ならロールバック可能。

SQLite

  • TRUNCATE構文なし
  • テーブルを空にする場合は DELETE FROM を使う。こちらはトランザクションでロールバック可能。

まとめ

  • ロールバックできる → PostgreSQL、SQL Server
  • ロールバックできない → MySQL / MariaDB、Oracle Database
  • TRUNCATEが存在しない → SQLite

「DBによって TRUNCATE がロールバックできるかどうかが違う」 という一点を押さえておけば十分です。
実務で安全に扱いたいときは、使っているDBの仕様を必ず確認してから実行しましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?