乐观锁和悲观锁

定义解释

乐观锁——认为数据变化不太频繁,允许多个事务对数据同时改动,通过增加版本或时间戳实现

悲观锁——认为数据不安全,会频繁改动。一个事务获得悲观锁后,其他事务无法对数据进行修改,直到锁被释放

搭建测试环境

假设Eric和Frank都有100元,他们需要一次性把钱花出去。

在这里插入图片描述
在这里插入图片描述
最后得到的结果是下图

在这里插入图片描述

乐观锁的案例表现

1)Eric将100元花出去

begin;
update x set money=money-100, version=version+1 where id=1 and version=0;
commit;

2)查询结果

Eric成功花出去了100元

在这里插入图片描述

3)再次开启一个新事务,让Eric花钱

命令依旧是update x set money=money-100, version=version+1 where id=1 and version=0

结果如下:

在这里插入图片描述
会发现修改的行数为0,没有任何修改。

悲观锁的案例表现

1)会话A中开启事务,查询操作

在这里插入图片描述

2)会话B中开启事务,查询操作
(此时会话A中的事务还没有提交)

在这里插入图片描述

3)在会话A中,Eric花钱(数据修改)

在这里插入图片描述

4)在会话B中进行查询

在这里插入图片描述
可知,事务A已经修改数据。

二者简单比较

比较点乐观锁悲观锁
优点不对数据库加锁,更新时才加锁,保证吞吐量利用锁机制实现数据的顺序方式执行
缺点可以人为操作,可能被外来事务干扰,出错抑制其他事务对数据的操作,影响系统的吞吐量
应用场景读比较多写比较多

参考文章:

理解悲观锁与乐观锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值