【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