问题描述:
两个线程基于同一个查询结果进行修改,后修改的人会将先修改人的修改覆盖掉.
悲观锁:
悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时就加上排他锁
手动加排它锁:
例:
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 ;
使用建议:
查询非常多,修改非常少 —————> 使用乐观锁
修改非常多,查询非常少 —————> 使用悲观锁