设想这么一个场景,我们需要对一条商品库存数据进行更新,做一个库存-1的操作。
假设目前库存100,有A,B两个人同时进行操作。
理论上来说,最终结果应该是98,然而实际情况有可能不是。
如果A操作的事务还没有提交,B这时从数据库读出来的库存还是100,然后B也进行-1操作,那最终两人操作完的结果是99。
我们希望更新一条数据的时候,这条数据没有被别人更新,这时可以利用乐观锁来实现。
乐观锁实现方式:
首先数据库表需要新增一个表示版本的字段,假设我们增加一个int字段如version
在实体类中对应的字段上加上注解:
@Version
private Integer version;
这时我们调用updateById
或者update(entity, wrapper)
方法,假设当前version字段的值为2:
user.setName("张三");
userService.updateById(user);
实际sql效果:
update user set name = '张三',version = 3 where id = 1 and version = 2