老师是不是可以这样理解

来源:2-4 事务原则与实现:JDBC事务(下)

qq_m_230

2020-08-18

老师是不是可以这样理解 :在 session2 中的 select 语句中 加上排他锁(for update)应该是把普通的快照读变成了当前读,而session1中的update本身就是排他锁 会锁表,所以会等session 1 unlock之后才拿到锁 故此时余额200 再执行up 余额就等于300!

写回答

1回答

大漠风

2020-08-20

首先对于UPDATE语句的执行,都是基于当前的最新值进行更新,也就是需要先读再写,也就是你说的“当前读”。

其次,FOR UPDATE会尝试锁当前的行记录,因为该记录被其他事务锁着,所以就会更待,等session1提交了,释放了锁,SELECT ... FOR UPDATE语句才会执行。

所以,应该不是“select ... for update 应该是把普通的快照读变成了当前读”,而是它会等待另一个事务结束。

1
0

分布式事务实践,从原理到实例,解决数据一致性

掌握分布式事务实现技术,是架构师必备技能。

1149 学习 · 153 问题

查看课程