老师是不是可以这样理解
来源: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 应该是把普通的快照读变成了当前读”,而是它会等待另一个事务结束。
10
相似问题