数据库乐观锁和悲观锁例子和分析

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.数据经常改,使用悲观锁,能保证数据正确地按顺序被修改,此时用乐观锁则会发生很多修改失败的情况。
  数据不常改,使用乐观锁,因为要改的数据别人基本都不会改,所以不用使用数据库锁那么重,耗性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值