`
haiyupeter
  • 浏览: 419667 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MySql悲观锁和乐观锁的基础理解

 
阅读更多
mysql悲观锁和乐观锁的理解

1、悲观锁
悲观锁顾名思意,全部锁起来

select *from t_order where id=101 or id=102 or id=103 for update
通过for update参数,告诉数据库在读取where条件中的数据时将这些数据全部锁住,禁止任何的读取或者更新操作,其余操作进入block等待,直接锁释放

优点:是能保证数据的一致性
缺点:坏处是所有的查询都必需等待锁的或者,如果查询一多,则数据库连接一直block,连接数较多,有可能导致数据库连接超时

2、乐观锁
乐观锁其实是程序员给悲观锁的另一种叫法,事实上是由程序员自己加逻辑处理

update t_goods set count = count - ${count} where id=1 count > ${count}
相当于在执行update时,count字段作为version字段,则此时可保证更新count时,count的数量一定是大于参数${count}的,保证了最大的运行效率,只有在count > ${count}的时候才真正产生冲突

当然也可以用一个独立的version来作为标识
如,先查出version,执行完成时更新version+1,如version有冲突则执行失败
select (status,status,version) from t_goods where id=#{id}

update t_goods
set status=2,version=version+1
where id=#{id} and version=#{version};

优点:此时一般适用于查询后执行失败的场景,保证查询不受锁的控制
缺点:大并发导致的大规模冲突时会导致较多的失败回滚操作
分享到:
评论

相关推荐

    mysql 悲观锁与乐观锁的理解及应用分析

    悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段。 不要把他们与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)混为一谈。 一、悲观锁 顾名思义,就是对于数据的处理持悲观...

    MySQL中的悲观锁与乐观锁

    主要介绍了MySQL中悲观锁与乐观锁的相关资料,帮助大家更好的理解和学习MySQL数据库,感兴趣的朋友可以了解下

    深入理解Yii2.0乐观锁与悲观锁的原理与使用

    主要介绍了深入理解Yii2.0乐观锁与悲观锁的原理与使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    mysql面试题100题,包含答案和解析.docx

    13、数据库的乐观锁和悲观锁。 14、SQL优化的一般步骤是什么,怎么看执行计划(explain),如何理解其中各个字段的含义。 15、select for update有什么含义,会锁表还是锁行还是其他。 16、MySQL事务得四大特性以及...

    Mysql面试题总结大全

    乐观锁与悲观锁的具体区别 8、数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据。索引的实现通常使用B树以其变种B+树。 9、索引的工作原理及其种类 在数据之外,数据库系统还...

    Java面试题mysql数据库和jvm知识面试题用于技能提升和面试提升

    SQL优化 3 数据库优化 6 DB&SQL优化 7 索引 8 分库分表分区 8 ...乐观锁悲观锁 17 JVM内存结构 19 内存结构 19 Java堆 20 JVM GC过程 20 GC执行机制(回收器) 21 JVM判断对象是否可以被回收算法等等。

    MySQL对于各种锁的概念理解

    今天小编就为大家分享一篇关于MySQL对于各种锁的概念理解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    MySQL详解视频.zip

    oMySql内部组件设计结构 MySql内部组件详解 ...o乐观锁 o悲观锁 操作 o读锁 o写锁 粒度 o表锁 o行锁 其他 o间隙锁 o临建锁 死锁优化解决方案 事务隔离级别 读未提交 读已提交 可重复读 

    涵盖了90%以上的面试题

    乐观锁和悲观锁 偏向锁 轻量级锁 自旋锁 自适应自旋锁 重量级锁 synchronized 可重入锁 土方法实现可重入锁 使用AQS类实现可重入锁 CAS MySQL 中的行级锁、表级锁和页级锁 java中的死锁 公平锁和非公平锁 锁的总结 ...

    Java架构面试笔试专题资料及经验(含答案)和学习笔记.zip

    Java架构面试笔试专题资料及经验(含答案)和学习笔记: ActiveMQ消息中间件面试专题.pdf Dubbo面试专题及答案(下).pdf Dubbo面试及答案(上).pdf java后端面试题答案.pdf ...面试必备之乐观锁与悲观锁.pdf

    java8集合源码分析-pangdan:面试相关技能

    数据库的锁(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁,以及加锁的select sql方式) 隔离级别,依次解决的问题(脏读、不可重复读、幻读) 事务的ACID B树、B+树 优化(explain,慢查询,show ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【数据库】乐观锁与悲观锁的区别 107 【数据库】数据库的三范式 107 【数据库】inner/left/right/full join的区别 109 【数据库】哪些字段该添加索引,哪些不添加? 109 【数据库】分页查询语句怎么写? 110 Mysql...

    2018年面试实战总结.zip

    2018/09/16 周日 下午 12:24 19,348 数据库悲观锁和乐观锁的区别.docx 2018/12/17 周一 上午 11:20 15,545 杨磊磊面试题.docx 2018/09/14 周五 下午 15:04 12,442 死锁分析.docx 2018/10/06 周六 上午 11:12 99,815 ...

    一次性搞定数据库事务

    彻底搞清楚MySQL的各种锁:行锁、表锁、共享锁、排它锁、Next-Key锁、间隙锁、X锁、S锁、IS锁、IX锁、死锁、索引与锁、意向锁等。 彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_REQUIRED、...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现悲观锁  21.5 利用Hibernate的版本控制来实现乐观锁  21.5.1 使用元素  21.5.2 使用元素  21.5.3 对游离对象进行版本检查  21.5.4 强制...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现悲观锁  21.5 利用Hibernate的版本控制来实现乐观锁  21.5.1 使用元素  21.5.2 使用元素  21.5.3 对游离对象进行版本检查  21.5.4 强制...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现悲观锁  21.5 利用Hibernate的版本控制来实现乐观锁  21.5.1 使用元素  21.5.2 使用元素  21.5.3 对游离对象进行版本检查  21.5.4 强制...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现悲观锁  21.5 利用Hibernate的版本控制来实现乐观锁  21.5.1 使用元素  21.5.2 使用元素  21.5.3 对游离对象进行版本检查  21.5.4 强制...

Global site tag (gtag.js) - Google Analytics