ACID属性
- Atomicity
- Consitency
- Isolation
- Durability
Atomicity(原子性)
- トランザクション内の複数の処理について、すべてが作用するか、全てが作用しないか
- ただ100万行のInsertなどを実行するときには
SAVEPOINT
構文を利用できる(SQL:2006)
Consitency(一貫性)
- トランザクションが開始された時と、終了された時、データベースはデータ整合性制約、参照整合性制約などのすべてが満たされている状態にある
Isolation(独立性)
- あるトランザクションは他のトランザクションに影響を受けないこと
- これを実現するために同時実行制御などをしなければいけない
Durability(耐久性)
- ロギングとバックアップ
同時実行制御
-
ACID属性が保たれなくなる状況
- ダーティライト
- T1がAを変更、T1をコミットする前にT2がAを変更。その後T1もしくはT2がロールバックすると、どの値に戻せばいいかわからなくなる
- ダーティリード
- T1がAを変更、T1がコミット/ロールバックする前にT2がAを読み出し、その後T1がロールバックするとT2が読んだAのあたいがは存在しなくなる。
- 反復不可能読み取り(ファジーリード)
- T1がAを読み取る。T1がAをコミット・ロールバックする前にT2がAを読み込んで変更し、コミットすると、T1が読み込んだはずのAがどこにもいなくなっている
- ファントム
- T1が条件Aに合致した行を読み込む。T2が条件Aに合致するような行を複数
insert
するとT1の条件に合致しているのに読み込まれない行が存在する
- T1が条件Aに合致した行を読み込む。T2が条件Aに合致するような行を複数
- 失われた更新
- T1がAを読み込む。T2がAを更新する(A'になる)。T1がAに基づいた更新を行いA''にすると、T2で行った更新が失われてしまう。
- ダーティライト
-
- これまでの状況を回避するためにセッションにどれくらいの一貫性で実行できるかを定めたもの
最後に
- 実行制御や独自のトランザクション処理は本来はSQLを利用するアプリケーションでは意識しなくてもいいかもしれない。ただ、水面下で何が行われているかを知っておくことは重要だ