1.乐观锁:乐观地认为每次读数据别人都不会修改,所以不需要用数据库锁 //查出商店中id=1的商品的版本号 select version currentVersion from shop where id=1; //把id=1的商品库存减1,并把版本号自增1 update shop set num = num - 1,version = version + 1 where id=1 and version = currentVersion; 2.悲观锁:悲观地认为每次读数据别人都会修改,所以要用数据库锁 //0.开始事务 begin; //1.查出商品库存 select num from shop where id=1 for update; //2.将商品库存减1 update items set num = num - 1 where id = 1; //3.提交事务 commit; 悲观锁用了select for update,在事务结束之前其他事务都不能改id=1的数据, 如果id用了索引则只锁行,没用索引则会锁表。 3.数据经常改,使用悲观锁,能保证数据正确地按顺序被修改,此时用乐观锁则会发生很多修改失败的情况。 数据不常改,使用乐观锁,因为要改的数据别人基本都不会改,所以不用使用数据库锁那么重,耗性能。
数据库乐观锁和悲观锁例子和分析
最新推荐文章于 2023-08-01 09:41:19 发布