事务进行select for update,如果在等待锁释放时,其他事务使得不再符合where条件,那么会发生什么?

事务A尝试进行加锁操作 select for update where xxx,但此时事务B已经加update锁,事务A会等待事务B释放锁再执行。

那么,如果事务B commit所作的改变,使得某些行数据不再符合事务A的where XXX条件,

那么此时会发生什么?事务A的select还会获取到这些数据吗?

阅读 6.8k
3 个回答

当 B 释放锁的时候,数据已经发生改变。A 再进行当前读就会发现没有符合的数据,所以 select 获取不到这些数据。

select for update 和 select in share mode 都是当前读,都是读取最新的数据

select for update加了排他锁,是当前读,所以如果B修改了数据,A会读不到数据的。

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