mysql的查询流程一般是:mysql客户端通过协议与mysql服务器建立连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终

止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用API获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引擎有关。

mysql乐观锁来解决并发问题

乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式:

1、使用版本号实现乐观锁

版本号的实现方式有两种,一个是数据版本机制(自己参与的项目基本采用的是version),一个是时间戳机制。具体如下。

a.使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。如果更新操作顺序执行,则数据的版本(version)依次递增,不会产生冲突。但是如果发生有不同的业务操作对同一版本的数据进行修改,那么,先提交的操作会把数据version更新为2,当A在B之后提交更新时发现数据的version已经被修改了,那么A的更新操作会失败。

b.时间戳机制,同样是在需要乐观锁控制的table中增加一个字段,名称无所谓,字段类型使用时间戳(timestamp), 和上面的version类似,也是在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时间戳进行对比,如果一致则OK,否则就是版本冲突。

mysql suoyin 和锁_mysql 索引和锁相关推荐

  1. mysql suoyin 和锁_Mysql索引与锁

    Mysql索引与锁 Mysql索引与锁 本文以Mysql5.7为例测试. 1:mysql索引方法 Mysql的索引方法分为btree索引和hash索引. hash索引:是通过hash计算后比较,所以只 ...

  2. mysql b 树 锁_mysql索引B+树、MVCC、锁一文搞懂

    1.innodb索引 innodb是页存储,一页是16K. 一个表的行数据都放到页里,单页都是单链表递增排序. 每个页之间都是双向链表保存.该页标记成数据页. 根据id查询时,也不知道在哪个数据页上. ...

  3. mysql 表级锁_MySQL行级锁和表级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  4. mysql表级锁和行级锁_MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  5. mysql a锁_MYSQL中的锁

    前言 刚开始接触MYSQL,对其锁机制并不了解,在项目里面,针对死锁以及锁竞争,约定了两条规则. 对涉及多个业务表的更新,要遵守一定的顺序,如按照TABLE-A,TABLE-B,TABLE-C的次序 ...

  6. MySQL并发 共享锁目的_mysql并发与锁机制

    在InnoDB中,锁是逐步获得的,因此发生死锁是可能的.发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另外一个事务获得锁,并继续完成事务.但在涉及外部锁,或涉及表锁的情况下,I ...

  7. mysql默认乐观锁悲观锁_MySQL中悲观锁和乐观锁到底是什么?-阿里云开发者社区...

    索引和锁是数据库中的两个核心知识点,隔离级别的实现都是通过锁来完成的 按照锁颗粒对锁进行划分 ? 锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别为行锁.页锁和表锁. 行锁就是按 ...

  8. mysql中的乐观锁_MySQL中悲观锁和乐观锁到底是什么?

    索引和锁是数据库中的两个核心知识点,隔离级别的实现都是通过锁来完成的 按照锁颗粒对锁进行划分 ? 锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别为行锁.页锁和表锁.行锁就是按照 ...

  9. mysql innodb 间隙锁_Mysql innodb 间隙锁

    前段时间系统老是出现insert死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...

最新文章

  1. 从单张图像学习双目图像
  2. 微软私有云分享(R2)16PowerShell查看虚拟机信息
  3. Oracle笔记:备份还原
  4. BC 2015在百度之星程序设计大赛 - 预赛(1)(矩形区域-旋转卡)
  5. python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...
  6. 使用CounterDownTimer实现时分秒倒计时
  7. 从零开始的linux 第十九章(mv命令详解)
  8. NPDP第四章 文化、组织与团队
  9. 64qam带宽计算_滚降系数为0.5的64QAM信号,数据速率若为_____,则带宽为______。
  10. 【rmzt】美女之目露凶光win7主题
  11. 电子与智能化工程专业承包资质标准
  12. 双碳目标下综合能源系统低碳运行优化调度Matlab程序,包含光伏、风电、热电联产、燃气锅炉、电锅炉、电
  13. cas5.3.2单点登录-配置记住我(十六)
  14. cout和cin后面跟指针的问题
  15. 局域网唤醒 外网无法唤醒_为您的网络设置局域网唤醒控制面板
  16. 云服务器和共享主机,共享虚拟主机、独享虚拟主机还是云服务器?
  17. java时间戳 秒_Java:如何为时间戳添加秒?
  18. 2007年互联网发展趋势预测:RSS将成为主流
  19. 5.参数估计——点估计与区间估计概念,置信区间的公式求法与Python实现求出结果
  20. flt文件matlab,FLT文件格式.pdf

热门文章

  1. 95-50-020-java.nio.channels-NIO-NIO概览
  2. 【java】java 并发编程 LinkedBlockingDeque
  3. 【JVM】JVM客户端 server模式 client 模式
  4. 【Kafka】kafka 消费者组静态成员(static consumer member)
  5. 【elasticsearch】 基于_version进行乐观锁并发控制
  6. Spring : Spring定义Bean的两种方式:lt; bean gt;和@Bean
  7. JsonView插件的使用
  8. maven项目打包时生成dependency-reduced-pom.xml
  9. java datetime long_Android Java datetime值从String到Long到String问题
  10. 反射和多态的实现原理详解以及区别