事务的隔离级别
2014-02-28 22:45
155 查看
之前在百度百科、CSDN、博客园等各种资料上找关于事务隔离级别之间的关系。发现都不是很完整!
经过我一晚上折腾电脑来实验以及自己对这些隔离级别以及机制的理解,确定了如下隔离级别的真实关系(实验环境是SQL SERVER2005,或许不同环境有出入吧)
总的原则:任何情况下一个事务写某行的时候另一个事务都不能写这些行
任何情况下一个事务读某行的时候另一个事务都可以读这些行
Read uncommited:任何情况下都可以读取任何信息,该事务读过的行允许其它事务进行写操作。
Read commited:读取某行时该行必须已经提交。(如果另一个事务是serilizable,只要serilizable的事务对该表进行写操作,哪怕serilizable事务所写的行与该行无关该事务也无法读取)该事务读过的行允许其它事务进行写操作。
Repeatable read:读取某行时该行必须已经提交。(如果另一个事务是serilizable,只要serilizable的事务对该表进行写操作,哪怕serilizable事务所写的行与该行无关该事务也无法读取。)该事务读取的行在事务结束前(包括提交和回滚)禁止任何其它对这些行进行的写操作(哪怕写操作不是在某个事务中)。
Serilizable:该事务只要对某张表进行读取,这张表在事务结束前(包括提交和回滚)就会无法进行除该事务外的任何其它写操作(哪怕写操作与读取的行无关,哪怕写操作不是在某个事务中)。该事务只要对某张表进行写操作,这张表在事务结束前(包括提交和回滚)read commited和read uncommited的事务都无法对该表进行读操作(哪怕读取的行与写的行无关)
之前在百度百科、CSDN、博客园等各种资料上找关于事务隔离级别之间的关系。发现都不是很完整!
经过我一晚上折腾电脑来实验以及自己对这些隔离级别以及机制的理解,确定了如下隔离级别的真实关系(实验环境是SQL SERVER2005,或许不同环境有出入吧)
总的原则:任何情况下一个事务写某行的时候另一个事务都不能写这些行
任何情况下一个事务读某行的时候另一个事务都可以读这些行
Read uncommited:任何情况下都可以读取任何信息,该事务读过的行允许其它事务进行写操作。
Read commited:读取某行时该行必须已经提交。(如果另一个事务是serilizable,只要serilizable的事务对该表进行写操作,哪怕serilizable事务所写的行与该行无关该事务也无法读取)该事务读过的行允许其它事务进行写操作。
Repeatable read:读取某行时该行必须已经提交。(如果另一个事务是serilizable,只要serilizable的事务对该表进行写操作,哪怕serilizable事务所写的行与该行无关该事务也无法读取。)该事务读取的行在事务结束前(包括提交和回滚)禁止任何其它对这些行进行的写操作(哪怕写操作不是在某个事务中)。
Serilizable:该事务只要对某张表进行读取,这张表在事务结束前(包括提交和回滚)就会无法进行除该事务外的任何其它写操作(哪怕写操作与读取的行无关,哪怕写操作不是在某个事务中)。该事务只要对某张表进行写操作,这张表在事务结束前(包括提交和回滚)read commited和read uncommited的事务都无法对该表进行读操作(哪怕读取的行与写的行无关)
相关文章推荐
- [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
- NYOJ558 一二三
- 利用NS2的产生随机数机制来实现对链路的动态设置(连接建立时间,延迟)
- Android自定义控件实现及其布局
- 好记性不如烂笔头——WebService与Remoting
- ThoughtWorks持续集成平台GO开源了
- 好记性不如烂笔头——WebService与Remoting
- java工厂方法模式
- VLAN间路由实践
- 黑马程序员 Java基础学习笔记11 异常
- Dijkstra 调度场算法 Python实现 一
- 111
- Tomcat中“Offending class: javax/servlet/Servlet.class”错误:重复的servlet包
- 程序员前辈走过的路
- Hibernate Annotation (Hibernate 注解实例)
- 批处理简单运用
- NTP时间服务构建
- BAT 实现删除指定天数之前的文件
- 怎样才能学习不分心——找回“专念”的力量
- SQLite入门与分析(二)---设计与概念(续)