java并发操作同一条数据防止覆盖更新 使用 乐观锁 悲观锁
程序员文章站
2024-01-08 09:35:16
...
乐观锁:
使用一个version字段标识数据的当前版本,每次更新数据的时候同时更新version = version + 1,where条件中需要加上version等于当前事务查询出的数据的version,如果version的值已经改变,则更新失败。
update t_goods
set status=2,version=version+1
where id=#{id} and version=#{version};
悲观锁:mysql行级锁。排它锁 for update
begin;
select id from user where id = 1 for update;//锁住这条数据
end;
commit;//提交,释放悲观锁