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?

More than 3 years have passed since last update.

今さら解説するSQL「トランザクション制御」

Posted at

トランザクションとは

一連のデータ操作をまとめた論理的な処理単位。
ざっくり言うとUPDATEとかINSERTした後に、コミット(※1)もしくはロールバック(※2)するまでの処理を1トランザクションと考える。

※1 コミット:全ての操作を確定させる。
※2 ロールバック:全ての操作を取り消す。

もしトランザクションの概念がない場合、以下のような事象が起こった場合にデータの不整合が発生する。

例:AさんからBさんの口座へ5万円の振替処理を行う
①Aさんの口座残高から5万円をマイナスする。
②Bさんの口座残高に5万円をプラスする予定だったが、障害により処理が失敗した。

①、②のそれぞれの処理を1つのトランザクションで管理していない場合はAさんの口座から5万円差し引かれた状態になるのでデータとして不整合が生じる。

しかし、1トランザクションとして管理していた場合、ロールバックすることで①の処理も取り消すことができるので、データの整合性を担保することができる。

トランザクションの開始と終了

【開始】
サーバーに接続後、または直前のトランザクションが終了後、「最初のDML(※)文がじっこうされたとき」に自動的にトランザクションが開始される。
※DML:データ操作言語。SELECT、INSERT、UPDATE、DELETEなど。トランザクションは1つ、または複数のDML文で構成される。

【終了】
以下のイベントが発生した場合、終了する。

  • COMMIT文、ROLLBACK文の実行時
  • DDL、もしくはDCL文の実行時(自動コミット)
  • ユーザーによってSQL実行ツールが正常終了した場合(自動コミット)
  • ユーザーによってSQL実行ツールが異常終了した場合(自動ロールバック)
  • マシン障害やシステムクラッシュが発生した場合(自動ロールバック)

その他のトランザクション制御処理

トランザクション制御文にはCOMMIT、ROLLBACK以外に「SAVEPOINT」がある。
SAVEPOINT文を実行することにより、トランザクションを継続したまま指定したセーブポイントまでロールバックすることができる。

  • SAVEPOINT セーブポイント名
    ⇨セーブポイントを作成する。トランザクションは継続したまま。
  • ROLLBACK TO セーブポイント名
    ⇨指定したセーブポイントまでロールバックする。複数のセーブポイントを設定した場合、指定したセーブポイント以降のセーブポイントは自動的に破棄される。
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?