以下是实现乐观并发控制的一种简单而常见的方法:
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
。如果不是,那么它意味着还有其他会话修改数据。