トランザクション実行時の問題と分離レベル
Dirty Read
別のtransactionで更新後、commitされていないデータを読む。
TransactionA x=10 x=x-5 | | x=10 |r |w rollback x=10 ---------------------------------- x=5 |r | x=5 TransactionB
Fuzzy Read (Nonrepeatable Read) = 反復不能読み取り
同一Transaction内で同じselectが実行されたときに、同じ参照結果が得られない
TransactionA X=10 X=X-5 | | X=10 |r |w ----------------------------------- |r X=5 |r | | X=10 X=5 TransactionB
Fantom Read
Transaction中に現れたり消えたりするデータが存在
TransactionA |insert |w ----------------------------------- | | | | count(*)=10 count(*)=11 TransactionB
分離レベルの指定
Dirty Read Fuzzy Read Fantom Read READUNCOMMITED * * * READCOMMITED OK * * REPEATABLEREAD OK OK * SIRIALISABLE OK OK OK
(参考)トランザクション実行時の問題と分離レベルについて
http://d.hatena.ne.jp/zecl/20080204/p3