【DB】トランザクション / Transaction

【1】トランザクション

* トランザクションは COMMIT 又は ROLLBACK の実行によって終了する
* 複数のトランザクションを同時に実行しても、
 排他制御(※1参照)を行うことでデータベースの一貫性は保証される

※1 排他制御(exclusive control)とは...

あるユーザが更新中のデータに一時的にロックをかけることで、
別のユーザが同時に更新できないようにするための仕組み。
ユーザの更新が終われば、ロックは解除される。

【2】目的

* データ整合性のため

【3】ACID特性

* トランザクションが信頼性を持つためには
 「ACID特性」が必要であるとされている

Atomicity (原子性)

* 例えば、銀行の口座Aから口座Bに100万円を送金する場合に
 以下の順序で、トランザクションが実行されなくてはならず、
 この全てが実行される要件をAtomicity (原子性)と言う。
~~~~~~~~~~~~~
 [1] 口座A から100万円を引き出す
 [2] 口座B に100万円を振り込む
~~~~~~~~~~~~~
 * 「すべて実行される」か「一つも実行されない」の
 どちらかの状態になるという性質

Consistency (一貫性)

* 送金には、口座Aに100万円以上の残高が必要で、
 この前提を Consistency (一貫性) を言う。
* トランザクションの前後でデータの整合性が保たれ、
 矛盾の無い状態が継続される性質

Isolation (独立性)

* 引き出しと振り込みが同時に行われたとしても、
 引き出し→振り込みの順で行われた場合と
 結果が同じになるようにするには、 Isolation (独立性) と言う。
 * トランザクション実行中の処理過程が外部から隠蔽され、
 他の処理などに影響を与えない性質

** Durability (耐久性) *

* トランザクション全体が完了した時点で、
 その記録を失われないことを保証することを
  Durability (耐久性) と言う
 * トランザクションが完了したら、その結果は記録され、
 システム障害などが生じても失われることがないという性質

【4】トランザクションの開始・完了

1)(明示的に)トランザクションの開始

SQL Serverの場合

BEGIN TRANSACTION

Oracleの場合

SET TRANSACTION

2)トランザクションの確定

SQL Serverの場合

COMMIT TRANSACTION

Oracleの場合

COMMIT

3)トランザクションの破棄

SQL Serverの場合

ROLLBACK TRANSACTION

Oracleの場合

ROLLBACK

参考文献

http://itpro.nikkeibp.co.jp/article/COLUMN/20060118/227488/?ST=develop

関連記事

PostgreSQLトランザクション
https://dk521123.hatenablog.com/entry/2014/03/12/002048
Snowflakeトランザクション
https://dk521123.hatenablog.com/entry/2022/12/19/221551