理解事务隔离级别
http://zhuyufufu.iteye.com/blog/1986857
上面这篇文章介绍了数据库事务的相关知识。
其中说明了数据库事务有四个隔离级别:read uncommit / read commit / repeatable read / serializable
中文的叫法为: 未授权读(读未提交)/ 授权读(读提交)/ 可重复读 / 序列化
不论英文或中文的叫法都不大好记忆。那有没有直指本质,容易记忆的方法呢?
下面介绍一下我的理解:
以两个事务为例来说明问题。事务隔离就是对这两个事务的读写并发操作做出限制。
从数学的角度来看这两个事务的读写有四种排列组合方式: 写写、写读、读写、读读。
那四种隔离级别与这四种排列组合方式是否有联系呢?答案是有。
未授权读就是对两个事务写写的并发控制,授权读就是对写读的控制,可重复度就是对读写的控制,序列化就是对读读的控制。
这里有个隐含的前置条件,写的操作权重是大于读的,也就是说可以写基本上暗含了可以读。
下面从两个事务读写排列组合的角度解释一下事务隔离级别解决了的问题:
写写对应数据库数据更新丢失的问题(写的同时在写)
写读对应脏读(写的同时在读,之后写被撤销)
读写对应不可重复读(读了之后又被修改的数据)
读读对应幽灵数据(读了之后被删除的数据)
这样的解释是否更好理解了呢?
对于我这样是比较好记忆的。