精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-04
楼主所说的幻读也是不可重复读的一种特例。
事务的并发还有丢失修改,比如事务A和B都读出数据X=5000, 事务A对X做+1操作,并提交;接着事务B对A做+2操作并提交。最终数据X=5002,事务A对X的修改丢失了。 |
|
返回顶楼 | |
发表时间:2011-08-04
sswh 写道 bitray 写道 事务没提交,你的8000怎么写到数据库里的。这个帖子的是实际意义不大
难道事务没提交,数据就不会写到数据库? 当然会写到数据库,要不然DBMS要数据库锁、回滚机制干嘛? 是hibernate用多了的后遗症吧。 ReadUncommitted隔离级别的作用就是来读取 已经写到数据库、但尚未提交或者回滚的数据的! 根据楼主的标题,那既然用了spring,我们为的是什么? 你说的是对的,A事物不提交,数据也会写进数据。B可以读取,此时A回滚,B还是旧数据。 spring和hibernate配合后,数据库一次性提交,所以没模拟出这种情况。当然小弟也很少用hibernate |
|
返回顶楼 | |
发表时间:2011-08-04
bitray 写道 sswh 写道 bitray 写道 事务没提交,你的8000怎么写到数据库里的。这个帖子的是实际意义不大
难道事务没提交,数据就不会写到数据库? 当然会写到数据库,要不然DBMS要数据库锁、回滚机制干嘛? 是hibernate用多了的后遗症吧。 ReadUncommitted隔离级别的作用就是来读取 已经写到数据库、但尚未提交或者回滚的数据的! 根据楼主的标题,那既然用了spring,我们为的是什么? 你说的是对的,A事物不提交,数据也会写进数据。B可以读取,此时A回滚,B还是旧数据。 spring和hibernate配合后,数据库一次性提交,所以没模拟出这种情况。当然小弟也很少用hibernate 这跟Spring, Hibernate没有任何关系,这是纯数据库问题。ok? 你们是不是除了Spring,Hibernate后真的对数据库一无所知了? |
|
返回顶楼 | |
发表时间:2011-08-04
本地事物很好控制,难的是跨域事物
|
|
返回顶楼 | |
发表时间:2011-08-05
我不知道为什么大家都投隐藏贴又不说明原因,如果是原创,就应该鼓励啊,嗨,真是不敢发帖了。
|
|
返回顶楼 | |
发表时间:2011-08-05
pch272215690 写道 我不知道为什么大家都投隐藏贴又不说明原因,如果是原创,就应该鼓励啊,嗨,真是不敢发帖了。
表示同意 |
|
返回顶楼 | |
发表时间:2011-08-05
说的很好, 支持楼主。
不过 这些隔离级别都是通用的哦。 为啥说是spring里面的呢 |
|
返回顶楼 | |
发表时间: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则为脏数据。 大部分的数据库的隔离级别是提交读,不会产生脏读,改变事物的隔离级别为未提交读,这样就会产生脏读,楼主的例子没有错误。 |
|
返回顶楼 | |
发表时间:2011-08-05
顶楼主啊 那些瞎投的。。就不理解了。。。
|
|
返回顶楼 | |
发表时间:2011-08-05
这个帖子不错,关键后期的讨论非常给力。救一下。
|
|
返回顶楼 | |