论坛首页 Java企业应用论坛

对脏读|不可重复度|幻读的理解以及Spring定义的五种事务隔离级别

浏览 18804 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (12)
作者 正文
   发表时间:2011-08-04  
楼主所说的幻读也是不可重复读的一种特例。

事务的并发还有丢失修改,比如事务A和B都读出数据X=5000, 事务A对X做+1操作,并提交;接着事务B对A做+2操作并提交。最终数据X=5002,事务A对X的修改丢失了。
0 请登录后投票
   发表时间:2011-08-04  
sswh 写道
bitray 写道
事务没提交,你的8000怎么写到数据库里的。这个帖子的是实际意义不大


难道事务没提交,数据就不会写到数据库?
当然会写到数据库,要不然DBMS要数据库锁、回滚机制干嘛?
是hibernate用多了的后遗症吧。

ReadUncommitted隔离级别的作用就是来读取 已经写到数据库、但尚未提交或者回滚的数据的!



根据楼主的标题,那既然用了spring,我们为的是什么?
你说的是对的,A事物不提交,数据也会写进数据。B可以读取,此时A回滚,B还是旧数据。

spring和hibernate配合后,数据库一次性提交,所以没模拟出这种情况。当然小弟也很少用hibernate
0 请登录后投票
   发表时间:2011-08-04  
bitray 写道
sswh 写道
bitray 写道
事务没提交,你的8000怎么写到数据库里的。这个帖子的是实际意义不大


难道事务没提交,数据就不会写到数据库?
当然会写到数据库,要不然DBMS要数据库锁、回滚机制干嘛?
是hibernate用多了的后遗症吧。

ReadUncommitted隔离级别的作用就是来读取 已经写到数据库、但尚未提交或者回滚的数据的!



根据楼主的标题,那既然用了spring,我们为的是什么?
你说的是对的,A事物不提交,数据也会写进数据。B可以读取,此时A回滚,B还是旧数据。

spring和hibernate配合后,数据库一次性提交,所以没模拟出这种情况。当然小弟也很少用hibernate


这跟Spring, Hibernate没有任何关系,这是纯数据库问题。ok?
你们是不是除了Spring,Hibernate后真的对数据库一无所知了?
0 请登录后投票
   发表时间:2011-08-04  
本地事物很好控制,难的是跨域事物
0 请登录后投票
   发表时间:2011-08-05  
我不知道为什么大家都投隐藏贴又不说明原因,如果是原创,就应该鼓励啊,嗨,真是不敢发帖了。
0 请登录后投票
   发表时间:2011-08-05  
pch272215690 写道
我不知道为什么大家都投隐藏贴又不说明原因,如果是原创,就应该鼓励啊,嗨,真是不敢发帖了。

表示同意
0 请登录后投票
   发表时间:2011-08-05  
说的很好, 支持楼主。
不过 这些隔离级别都是通用的哦。 为啥说是spring里面的呢
0 请登录后投票
   发表时间:2011-08-05  
hengheng 写道
eredlab 写道

什么是脏读?

例如:

张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。

与此同时,

事务B正在读取张三的工资,读取到张三的工资为8000。

随后,

事务A发生异常,而回滚了事务。张三的工资又回滚为5000。

最后,

事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。

(大部分数据库缺省的事物隔离级别都不会出现这种状况)

脏读的举例有问题吧。

事务A未提交,数据库中的数据不会发生改变。事务B读取到的工资怎么会是8000呢? 应该是5000啊。

 

应该是:

      事务A要将A的工资改为8000. 但事务A尚未提交

      事务B此时查询A的工资。查得结果为5000.

      随后事务A提交。此时事务B读到的5000则为脏数据。

大部分的数据库的隔离级别是提交读,不会产生脏读,改变事物的隔离级别为未提交读,这样就会产生脏读,楼主的例子没有错误。

0 请登录后投票
   发表时间:2011-08-05  
顶楼主啊  那些瞎投的。。就不理解了。。。
0 请登录后投票
   发表时间:2011-08-05  
这个帖子不错,关键后期的讨论非常给力。救一下。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics