乐观锁

来源:互联网 发布:双肩背包淘宝 编辑:程序博客网 时间:2024/04/29 22:27

乐观锁一般是在数据库的记录中添加一个版本号的冗余字段。
此图可以辅助理解乐观锁的使用。本图来自曾经浏览的某篇文章,具体地址忘记了,因此没有标注来源,只能用文字说明下
这里写图片描述

版本号的具体工作逻辑如下

create table repertory{    id int,    sum int ,    residue int,    version int }

1、当更新之前我们都会把当前这条记录查询出来

select * from repertory where id=1;

2、加入我们查询出来的数据的version=1。这个时候我们把sum修改成100.

update repertory set sum=100 ,version=version+1 where version=#{version} and id=#{id}

这个时候ID应该是1 verson也应该是1,如果更新成功了,那么version会变成2。

场景当A和B 同时执行了1查询出来数据,之后执行2的时候,当A执行完毕,这个时候version已经变成了2,B在执行2的时候就会找不到对应的数据也就不会做到期望的更新了。这个时候A应该是成功的,B应该是失败的,但是从数据层面来看,数据是完整的,这就是我理解的乐观锁的应用。

原创粉丝点击