龗孖 龗孖
首页
  • JAVA
  • 设计模式
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 页面

    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

靇孖

某微型企业非牛逼技术专家。
首页
  • JAVA
  • 设计模式
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 页面

    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JAVA

  • MQ

  • 工具

  • 微服务

  • 数据库

    • MySQL

      • 数据库
      • MySQL间隙锁原理深度详解
    • 其他

    • 程序设计

    • 算法

    • 服务端
    • 数据库
    • MySQL
    龗孖
    2023-12-13
    目录

    MySQL间隙锁原理深度详解

    | | 1 | begin; |
    | | 2 | select * from test where id>1; | begin; | | 3 |
    | insert into test values(21,3); | | 4 |
    | commit; | | 5 | select * from test where id>1 for update; |
    | | 6 | commit; |
    |

    有兴趣的同学可以按照这个步骤操作一下看下效果,针对上面的操作来做一下分析:

    • 事务A在第2步使用的是快照读,此时生成了Read View查询出来的数据是id>1这个区间的所有数据;

    • 事务B在第3步插入了一条id为21的数据,因为事务A没有对数据加锁,所以事务B可以正常插入;

    • 第5步事务A查询时查出了事务B插入的数据,因此产生幻读;

    # 3.4.1 原因分析

    第5步的时候使用了for update,即使用的是当前读,不会再读取Read View,而读取的是当前最新的数据,所以读出了事务B插入的数据。

    # 3.4.2 总结

    结合上面的分析结果,做最后如下小结

    • MySQL默认隔离级别可重复读很大程度上解决了幻读问题,在快照读情况下是通过MVCC解决,在第一次执行查询时生成一张Read View,后续每次快照读都是读这张Read View;

    • 在当前读情况下是加锁来解决,枷锁会阻塞其他事务的当前读,从而避免幻读;

    • 然而可重复读并不能完全解决幻读,比如当一个事务里面使用快照读之后又使用当前读的话就还是可能会出现幻读。

    上次更新: 2024/11/01, 16:22:32
    数据库
    DNS_是如何影响你冲浪速度的

    ← 数据库 DNS_是如何影响你冲浪速度的→

    最近更新
    01
    树中两个节点的最低公共祖先
    10-17
    02
    hexo多平台多博客网站同步
    09-04
    03
    最长不含重复字符的子字符串
    09-03
    更多文章>
    Theme by Vdoing | Copyright © 2015-2024 Ling ma | 996.icu | 京ICP备16011424号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式