印象中这是在博客里第三次重提数据库事务的隔离级别了。这一块内容有一点绕,当时弄明白了,过一段时间又会忘记。我觉得掌握数据库事务隔离级别的窍门在于:罗列出事务在并发时会发生哪些异常情况,什么样的隔离级别会杜绝这种异常情况的发生。下面就按照这个思路把数据库事务隔离级别再复习一遍。
第一种可能出现的异常情况:丢失更新(Lost Update)
数据库事务隔离级别:Read Uncommitted可以避免此类异常
第二种可能出现的异常情况:脏读(Dirty Read)
数据库事务隔离级别:Read Committed可以避免此类异常
第三种可能出现的异常情况:不可重复读(Unrepeatable Read )
数据库事务隔离级别:Reaptalble Read可以避免此类异常
第四种可能出现的异常情况:幻象读(Phantom Read)
数据库事务隔离级别:Serializable可以避免此类异常
下表是各隔离级别对各种异常的控制能力
LU丢失更新 | DR脏读 | NRR非重复读 | SLU二类丢失更新 | PR幻像读 | |
未提交读 RU | Y | Y | Y | Y | Y |
提交读 RC | N | N | Y | Y | Y |
可重复读 RR | N | N | N | N | Y |
串行读 S | N | N | N | N | Y |