当前位置:网站首页>乐观锁和悲观锁
乐观锁和悲观锁
2022-07-31 09:30:00 【棒棒吃不胖】
定义解释
乐观锁——认为数据变化不太频繁,允许多个事务对数据同时改动,通过增加版本或时间戳实现
悲观锁——认为数据不安全,会频繁改动。一个事务获得悲观锁后,其他事务无法对数据进行修改,直到锁被释放
搭建测试环境
假设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已经修改数据。
二者简单比较
| 比较点 | 乐观锁 | 悲观锁 |
|---|---|---|
| 优点 | 不对数据库加锁,更新时才加锁,保证吞吐量 | 利用锁机制实现数据的顺序方式执行 |
| 缺点 | 可以人为操作,可能被外来事务干扰,出错 | 抑制其他事务对数据的操作,影响系统的吞吐量 |
| 应用场景 | 读比较多 | 写比较多 |
参考文章:
边栏推荐
- Redis Sentinel原理
- Are postgresql range queries faster than index queries?
- Canvas particles change various shapes js special effects
- Pytorch学习记录(七):自定义模型 & Auto-Encoders
- 基于学生成绩管理系统(附源代码及数据库)
- 服务器上解压文件时提示“gzip: stdin: not in gzip format,tar: Child returned status 1,tar: Error is not recovera“
- A brief introduction to the SSM framework
- (C语言基础)原样输入输出
- JSP pagecontext对象的简介说明
- 各位大佬,sqlserver 支持表名正则匹配吗
猜你喜欢
随机推荐
通过栗子来学习MySQL高级知识点(学习,复习,面试都可)
关于挂载EXfat文件格式U盘失败的问题
【软考软件评测师】2012综合知识历年真题
@RequestBody和@RequestParam区别
感情危机,朋友的网恋女友要和他闹分手,问我怎么办
postgresql generate random date, random time
六、MFC文档类(单文档和多文档)
安装gnome-screenshot截图工具
二叉树的搜索与回溯问题(leetcode)
【机器学习】用特征量重要度(feature importance)解释模型靠谱么?怎么才能算出更靠谱的重要度?
loadrunner-controller-目标场景Schedule配置
SQLite3交叉编译
【Excel】生成随机数字/字符
多个js雷达图同时显示
JSP application对象简介说明
postgresql 生成随机日期,随机时间
数据中台建设(六):数据体系建设
模块八
(selenium)Service geckodriver unexpectedly exited. Status code was: 64
jupyter notebook初使用









