READ UNCOMMITTED
一番低い分離レベル。ダーティーリードを起こす可能性がある。コミット前に取り消されると混乱が発生する。
READ COMMITTED
文字通りコミットされたデータした読み取らない。(トリガ実行後など)作業中に更新がかかるとそれを読み込んでしまう。
データ参照時(即ちselect文実行時)に共有ロックを掛け、参照終了時に開放する。
データ更新時に専有ロックを掛け、トランザクション終了時に解放する。アクセス経路によって行を更新する順番が異なる場合、デッドロックが発生する可能性がある。
データ参照時にFOR UPDATE句を指定すると、対象行に専有ロックを掛け、トランザクション終了時に解放する。
REPEATABLE READ
最初にスナップショットを取る。作業中に他のユーザーが追加したデータを読み込むファントムリードを起こす可能性がある。(sumなどの値が不安定になる。)
因みにMySQLでは特殊な方法でファントムリードを防止しているらしい。
データ参照時に共有ロックを掛け、トランザクション終了時に解放する。
データ更新時に専有ロックを掛け、トランザクション終了時に解放する。
SERIALIZABLE
トランザクションを完全に分離して処理する。ロックの競合が多発する可能性がある。
DBスペシャリストのRDBMSの問題ではこれらに関連した問題が出題される。しかし、設定のための具体的なコードを記述する問題は見たことがない。