可重复读的一个小问题

题目描述

事务中的可重复问题

题目来源及自己的思路

对可重复读理解不清晰

相关代码

@Transactional
public void testB(){
    select * from user where id=1;(张三)
    update user set name=‘李四’ where id=1; 
    select * from user where id=1;(?)
}

问题

因为方法还没有结束,事务还没有提交
select * from user where id=1;(?)
会返回什么呢?又是什么原因呢?

阅读 1.9k
2 个回答

会返回李四。
一套事务的处理内容是连贯的,一个事务和另一个事务之间是隔离的。
把单个事务看成是一块连贯操作就好,里面你的顺序该怎么运行还是怎么执行。
事务如果失败会回滚,意思就是回滚你之前的操作,也就说你之前的每一句都是执行了的,只不过没有真正地入库。

返回李四,因为是自己的事务里的操作,自己做的修改自己当然看的见
除非read uncommited,否则提交之前其他事务看到的还是张三

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题