欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

乐观锁,悲观锁实现步骤

程序员文章站 2023-03-08 14:30:42
1:乐观锁:(行级)定义:乐观锁通过代码实现和数据库无关乐观锁认为本次操作不会导致冲突,所以不进行任何其他特殊处理,在更新后【如果冲突,更新不会成功,如果不冲突,则更新成功】再去判断是否冲突实现:1:查询需要修改的数据条目【select字段:需修改字段和当前版本号;where条件:唯一值】2:执行程序,修改当前条目【update字段:更新数据,版本号加1;where条件:唯一值,版本号=查询出版本号】引擎:所有引擎2:悲观锁:定义:悲观锁由数据库自己实现;悲观锁认为本次操作会出现数据冲突,所...

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;

本文地址:https://blog.csdn.net/qq_38989173/article/details/107322369