一 简介:今天咱们来聊聊悲观锁和乐观锁

二 悲观锁
  1 定义
   在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其   他事务才能够执行与该锁冲突的操作。
  悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。
 2 过程
  在对任意记录进行修改前,先尝试为该记录加上排他锁(exclusive locking)。
  如果加锁失败,说明该记录正在被修改,那么当前查询可能要等待或者抛出异常。 具体响应方式由开发者根据实际需要决定。
  如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。
  其间如果有其他对该记录做修改或加排他锁的操作,都会等待我们解锁或直接抛出异常。
3 优点和缺点
  悲观并发控制实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会;另外,在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只能增加系统负载;还有会降低了并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数
乐观锁
1 定义
 在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前, 每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出。
2 过程
 数据版本,为数据增加的一个版本标识。当读取数据时,将版本标识的值一同读出,数据每更新一次,同时对版本标识进行更新。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的版本标识进行比对,如果数据库表当前版本号与第一次取出 来的版本标识值相等,则予以更新,否则认为是过期数据。
3 优点与缺点
 乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。但如果直接简单这么做,还是有可能会遇到不可预期的结果,例如两个事务都读取了数据库的某一行,经过修改以后写回数据库,这时就遇到了问题。
补充
innodb 默认auto commit=1自动提交,使用的是乐观锁,如果想使用悲观锁,需要设置auto commit=0,select for update

转载于:https://www.cnblogs.com/danhuangpai/p/8398174.html

mysql 原理~ 乐观锁和悲观锁相关推荐

  1. 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理

    共享锁(S锁) 又称为读锁,可以查看但无法修改和删除的一种数据锁.如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 共享锁下其它用 ...

  2. mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?

    乐观锁和悲观锁相信大家都是知道的,这是java中的基础知识,今天我们就来看看它们两者该如何使用代码实现吧. 乐观锁实现 1).表设计 表task,分别有三个字段id,value.version 2). ...

  3. mysql原子性和乐观锁_乐观锁 VS 悲观锁

    1.乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度.在Java和数据库中都有此概念对应的实际应用. 1.1 概念悲观锁:对于同一个数据的并发操作,悲观锁认为自己在 ...

  4. mysql中锁原理及for update悲观锁的详解

    mysql 中有多种多样的锁,今天我们具体分享一下: 一.mysql中乐观锁和悲观锁原理及种类: ​        乐观锁并不是数据库自带的,如果需要使用乐观锁,那么需要自己去实现,一般情况下,我们会 ...

  5. mysql悲观锁和乐观区别_MySQL悲观锁和乐观锁的区别是什么

    MySQL悲观锁和乐观锁的区别是什么 区别如下: 1.概念不同 乐观锁( Optimistic Locking): 顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,&qu ...

  6. [精选]MySQL的各种锁(表锁,行锁,悲观锁,乐观锁,间隙锁,死锁)

    不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的.因为数据库隐式帮我们 ...

  7. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  8. MySQL 乐观锁与悲观锁

    悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁. 悲观锁: ...

  9. mysql 乐观锁和悲观锁

    数据库中锁机制,为了保证数据一致性,使各种资源在并发时变得有序设计的规则. MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定. 而乐观锁和悲观锁是通过技术手段使用的技 ...

最新文章

  1. ncnn tensorrt
  2. JQUERY 常用方法汇总
  3. LSMW批处理使用方法(05)_步骤3下
  4. 专访快手传输算法负责人周超博士:LAS标准的推出离不开信念感
  5. 【动态规划BFS】相遇
  6. PHP 函数截图 哈哈哈
  7. 图像风格迁移cvpr2020_CVPR 2020 | 浙大李俊成:用无监督强化学习方法来获得迁移能力...
  8. android图片闪动动画,android图片闪烁或帧动画
  9. Bootstrap源代码多行代码
  10. HTML Table 固定列宽,实现excel表格效果
  11. CG Rendering v.s. Browser Rendering
  12. 数据结构-单链表的正向排序
  13. 创建虚拟机与安装系统
  14. 概率论基础-严士健 第二版 习题与补充1.6答案
  15. 从零开始学习html(十)CSS格式化排版——下
  16. html 仿word页面,HTML+CSS入门 HTML页面仿WORD样式详解
  17. html特效代码 枫叶,经典FLASH特效代码
  18. 中大新华计算机科学与技术,专业评估|信息科学学院电子信息科学与技术、计算机科学与技术、软件工程、数字媒体技术专业评估考察会议举行...
  19. 提高工作效率--番茄工作法
  20. KeyError(‘metric mAP is not supported‘.format(metric))

热门文章

  1. 台式电脑键盘按键错乱_电脑键盘按键怕误触怎么办?用这款软件帮你屏蔽指定键盘按键!支持替换按键!...
  2. linux删除csv换行符,从CSV保存行删除换行符(Remove linefeed from csv preserving r
  3. c语言指针易错情况,C语言/C++从入门到精通之指针易错点总结
  4. count(*)效率提高_2020年最新整理财务统计函数,学会让你财务统计效率提升95%以上...
  5. 全民果园为什么服务器在维修中,你在果园管理中遇到的问题这里可以解决
  6. jeecgboot配置文件_Jeecg-Boot 技术文档
  7. 【BZOJ2243】【codevs1566】染色,树链剖分练习
  8. 【codevs2144】砝码称重2,哈希什么的都去死吧
  9. 18.外部相机校准——介绍,几何相机校正,自由度 测验,刚体变换,符号_1
  10. mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...