【SQL Server】【Oracle】トランザクション(Transaction)

トランザクション

目的

 * データ整合性のため

説明

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

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

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

補足「ACID特性」

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

Atomicity (原子性)

 * 例えば、銀行の口座Aから口座Bに100万円を送金する場合に以下の順序で、
   トランザクションが実行されなくてはならず、この全てが実行される要件をAtomicity (原子性)と言う。

 [1] 口座A から100万円を引き出す
 [2] 口座B に100万円を振り込む

 * 「すべて実行される」か「一つも実行されない」のどちらかの状態になるという性質

Consistency (一貫性)

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

Isolation (独立性)

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

Durability (耐久性)

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

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

SQL Serverの場合

BEGIN TRANSACTION

Oracleの場合

SET TRANSACTION

トランザクションの確定

SQL Serverの場合

COMMIT TRANSACTION

Oracleの場合

COMMIT

トランザクションの破棄

SQL Serverの場合

ROLLBACK TRANSACTION

Oracleの場合

ROLLBACK