为什么乐观锁定需要为每个语句使用唯一的version_id?

时间:2018-04-16 15:39:43

标签: mysql sql locking optimistic-concurrency

以下是实现乐观并发控制的一种简单而常见的方法:

select (status,status,version) from t_goods where id=#{id}
update t_goods 
set status=2,version=version+1
where id=#{id} and version=#{version}; 

但为什么我们需要为每次更新增加version_id?我认为在一个会话中只有相同的version_id是可以的,并保证它与其他会话不同。因为同一会话中的那些语句是序列化的,所以它们不可能相互影响。我是对的吗?

例如,在session1 / terminal1中我们将version_id保持为1,并且在session1 / termianl1的语句中我们只需要检查version_id是否为1。如果不是,那么它意味着还有其他会话修改数据。

0 个答案:

没有答案