1
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?

MySQLAdvent Calendar 2024

Day 2

MySQLのTRUNCATE TABLEとトランザクションについて

Posted at

概要

MySQLのTRUNCATE TABLE句とトランザクションについて簡単にまとめる。

TRUNCATE TABLE句について

このSQL句は指定したテーブルの中身を空にしたいときに使う。
結構強気にレコードが削除されるイメージで、パフォーマンスを優先しているらしい。
ロールバックに対応していなかったり、外部キー成約のあるテーブルに対しては実行する事ができない。
DELETE句のようにロールバックできるDML(データ操作言語)句ではなく、DDL(データ定義言語)句として分類される。
↓公式ドキュメント

TRUNCATE TABLE句とトランザクション

TRUNCATE TABLE句に限らずDDL句に分類されるすべてが対象になる話ではあるが、DDL句のほとんどが実行後に暗黙的にコミットが実行されるらしい。これはDDL句らが若干特別な存在であるため、独自のトランザクションで処理することが望ましいと考えられているからっぽい。

実行していないからわからないが明示的にトランザクションのSQL文の中でTRUNCATE TABLE句を実行するとトランケート直後にコミットが発生するため、そもそも実行できずエラーになるか、トランケート後の明示的なコミットで「トランザクションが無い」系のエラーが出るはず。

レコード削除時はDELETE句を使ったほうが良さそう。
そもそもロールバックできないので本番DBなどではよっぽどの理由(処理時間がかかりすぎるなど)が無い限りトランケートは実行しないほうがいいかも。

1
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
1
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?