问题描述:
两个线程基于同一个查询结果进行修改,后修改的人会将先修改人的修改覆盖掉.
悲观锁:
悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时就加上排他锁
手动加排它锁:
例:
Select stat from xxx where id = 1 for update;
缺点:查询效率低下
乐观锁:
乐观锁会乐观的认为每次查询都不会造成更新丢失.利用一个版本字段进行控制
表中加入版本字段version
例:
update order set stat=1 and version = version+1
where id = 1 and version =0 ;
使用建议:
查询非常多,修改非常少 —————> 使用乐观锁
修改非常多,查询非常少 —————> 使用悲观锁
本文探讨了在并发场景下,乐观锁与悲观锁的工作原理及其适用场景。悲观锁通过加排他锁来防止更新丢失,但牺牲了查询效率;而乐观锁则利用版本字段控制,适用于读多写少的情况。
1522

被折叠的 条评论
为什么被折叠?



