数据库之事务隔离级别简析

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:21 点击:

数据库之事务隔离级别简析
 
在分布式的系统中,通常会有多个线程连接到数据库中同时对一个表进行操作(这里的同时并不表示同一个时间点,而是同时竞争cpu的资源,至于如何调度,就要看线程和操作系统如何进行调度了),这种情况下如果会话的事物设置不当,就会导致数据混乱,常常会出现以下三种情况(假设现在系统中有两个会话A和B,同时对表T_Test操作): 

1.脏读:假如A开启事物后,在查询之前,B修改了表中的某条记录,但是事物还没提交,这个时候A再读取该表时,读到了B修改之后的数据,问题发生了:B如果此时回滚了事物,那么A读到的就是错误的数据了。 

2.不可重复读:假如A开启事物后,对表做了查询后,此时B修改了表中的某条记录,然后A又做了一次查询,问题发生了:对于事物A,第一次读取的结果对应的记录和第二次读取的结果不一致了 

3.幻读:假如A开启事物后,对表做了查询,此时B在表中新增了一条数据,然后A又做了一次查询,问题发生了:对于事物A,第二次读取的结果比第一次读取的结果多出一条记录   www.2cto.com  
因此,在JDBC的规范中对事物隔离级别做了相应的规定。 

1.读未提交(Read Uncommitted):这种隔离级别可以让当前事务读取到其它事物还没有提交的数据。这种读取应该是在回滚段中完成的。通过上面的分析,这种隔离级别是最低的,会导致引发脏读,不可重复读,和幻读。 

2.读已提交(Read Committed):这种隔离级别可以让当前事务读取到其它事物已经提交的数据。通过上面的分析,这种隔离级别会导致引发不可重复读,和幻读。 

3.可重复读取(Repeatable Read):这种隔离级别可以保证在一个事物中多次读取特定记录的时候都是一样的。通过上面的分析,这种隔离级别会导致引发幻读。 

4.串行(Serializable):这种隔离级别将事物放在一个队列中,每个事物开始之后,别的事物被挂起。同一个时间点只能有一个事物能操作数据库对象。这种隔离级别对于数据的完整性是最高的,但是同时大大降低了系统的可并发性。 
 
 
 
 
作者 Terry_zzz
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Request.ServerVariables 参数大全
    • 执行全文索引时出现权限不足的解决方法
    • 导入excel文件处理流程节点的解决方案
    • 查看sql修改痕迹(SQL Change Tracking on Table)
    • MongoDB安装为Windows服务方法与注意事项
    • App数据层设计及云存储使用指南
    • PostgreSQL启动过程中的那些事三:加载GUC参数
    • 写给MongoDB开发者的50条建议Tip1
    • Percolator与分布式事务思考(二)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1