乐观锁,悲观锁实现步骤
- 作者: 嗫?暁雲?
- 来源: 51数据库
- 2021-08-07
1:乐观锁:(行级)
定义:乐观锁通过代码实现和数据库无关
乐观锁认为本次操作不会导致冲突,所以不进行任何其他特殊处理,在更新后【如果冲突,更新不会成功,如果不冲突,则更新成功】再去判断是否冲突
实现:
1:查询需要修改的数据条目【select字段:需修改字段和当前版本号;where条件:唯一值】
2:执行程序,修改当前条目【update字段:更新数据,版本号加1;where条件:唯一值,版本号=查询出版本号】
引擎:所有引擎
2:悲观锁:
定义:悲观锁由数据库自己实现;悲观锁认为本次操作会出现数据冲突,所以每次操作都要获取锁再进行对数据的操作(相对需要耗费较多时间)
实现:共享锁,排它锁
注:如果where条件是主键则是行级锁,如果不是主键则是表级锁
共享锁:可多事务或非事务同时查询当前数据【如果有一个事务在查询后,执行了增删改语句,则数据锁定(自动追加排它锁),不再允许其他事务查询,直到事务结束为止】
实现:
1:开启事务
2:在查询语句后加【lock in share mode】
3:事务完成
引擎:仅支持innodb引擎
排它锁:只能由一个事务操作当前数据【加锁后,其他事务无法实现以下操作(行级锁:删改查操作,表级锁:增删改查)】
实现:
1:开启事务
2:在查询语句后加for update
3:逻辑处理
4:事务完成
引擎:innodb引擎
开启事务:start transaction;
提交事务:commit;
撤销事务:rollback;
推荐阅读
- SQLite数据库操作:原生操作,GreenDao操作讲解
- 数据库SQL实战题:获取员工其当前的薪水比其manager当前薪水还高的相关信息(教程)
- SQLSERVER查询区分大小写的写法分析
- SQL学习总结之SQL的分类介绍
- 阶梯到高级T-SQL 1级:高级T-SQL介绍交叉连接
- 高级T-SQL级别1的Stairway:使用CROSS JOIN引入高级T-SQL分析
- 什么是SQL隔离级别?四个SQL隔离级别定义介绍
- Sql递归介绍之用with实现递归查询
- SQLSERVER查询时日期格式化的实例讲解
- 数据库SQL实战:从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略(题解)
热点文章
SQLite数据库操作:原生操作,GreenDao操作讲解
18
数据库SQL实战题:获取员工其当前的薪水比其manager当前薪水还高的相关信息(教程)
4
SQLSERVER查询区分大小写的写法分析
36
SQL学习总结之SQL的分类介绍
6
阶梯到高级T-SQL 1级:高级T-SQL介绍交叉连接
4
高级T-SQL级别1的Stairway:使用CROSS JOIN引入高级T-SQL分析
4
什么是SQL隔离级别?四个SQL隔离级别定义介绍
2
Sql递归介绍之用with实现递归查询
6
SQLSERVER查询时日期格式化的实例讲解
4
数据库SQL实战:从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略(题解)
7
