当前位置: 首页 > news >正文

我们来学mysql -- 事务并发之幻读(原理篇)

事务并发之幻读

  • 题记
  • 幻读
  • 系列文章

题记

  • 在《事务之概念》提到事务对应现实世界的状态转换,这个过程要满足4个特性
  • 这世界,真理只在大炮射程之类,通往和平的道路,非“常人”可以驾驭
  • 一个人生活按部就班,人多起来,难免鸡飞狗跳
  • 同理现实世界的状态转换映射到数据库,满足4个特性也非一帆风顺
  • 数据库江湖,一个事务任我行,两个事务南北双雄,多事务江湖大乱
  • 接下来便是并发事务,幻读的问题

幻读

  • 引子

    • 组长召开了晨会,更新了开发任务,福报996,那大饼画的真香
    • 你情绪激昂,做出积极表态,保证完成任务
    • 等等…,这画风完全不符合咱们的审美
    • 真实的场景:回到工位上你,先伸个懒腰,侦查完四周,刷起短视频

  • 举例子

    • 卓别林正在农场中清点猪数,第一此20只,第二遍30只,第三遍15只…
    • 某人不禁笑出了猪叫,同事给你使眼色,身后组长的气压蔓延开来
    • 就这?说好的通俗易懂,段子多多呢!
    • 好吧,江郎才尽…啊!
      在这里插入图片描述

  • 如果一个事务先根据某些条件查询出一些数据,该事务未提交,另一个事务写入、删除了其他符合条件的记录,这就是幻读

    • 卓别林数猪,条件是猪,鸡鸭不会计算在内
    • 第一遍数了10只
    • 隔壁农场正值壮年的猪三哥,看到大圈中搔首弄姿的母猪花花,不服猪命,翻越栅栏,混了进来,第二遍一数11只
    • 因此初步理解,便有了转机,前后数的不一样
    • 但,这不合理吗?
    • 合理呀,学生报名,今天查10个,明天退学了仨,查是7,不一样,合现实世界的理呀!
    • 百思不得其解,撇了眼上面的定义,还有个点,会是关键吗?是啥呢!
      • 查出一些数据,该事务还未提交
      • 你说,咱就数个猪,不是说好的查(select)无事务(铁定不会有锁)
      • 问题TM的应该就是这个未提交,但咱不能理解!
    • 过了几天,突然一想,这是否应该在一系列场景(业务)下的要求
      • 农场展开一场牲畜数量的比赛
      • 你数鸡的数量
      • 他数牛的数量
      • 卓别林数猪的数量
      • 在比赛还未结束时(未提交)
      • 裁判人员再次进行计算(再数一遍)
      • 此时,隔壁农场,放出猪三哥,拐走了母猪花花,咱要公平,就得防着被阴一招
      • 所以,裁判人员数的有问题吗,没有问题的
      • 只是在当前这个业务下,是有问题的
      • 我特么真是个人才…

系列文章

我们来学mysql – 有无事务ID(原理版)
我们来学mysql – 建立索引(原理版)
我们来学mysql – 使用索引(原理版)
我们来学mysql – 索引失效(原理版)
我们来学mysql – 用不上的索引(原理版)
我们来学mysql – 索引上的锁(原理版)
我们来学mysql – 访问方法(原理篇)
我们来学mysql – 连接(原理版)
我们来学mysql – 查询成本之索引选择(原理篇)
我们来学mysql – EXPLAIN之ID(原理篇)
在这里插入图片描述

http://www.lryc.cn/news/500000.html

相关文章:

  • Ubuntu Linux 图形界面工具管理磁盘分区和文件系统(八)
  • Eclipse IDE 各个版本的用途和区别
  • 国产GPU中,VLLM0.5.0发布Qwen2.5-14B-Instruct-GPTQ-Int8模型,请求返回结果乱码
  • 在 Vue 3 中实现点击按钮后禁止浏览器前进或后退
  • Linux:软硬链接
  • Delphi XE 安卓Web开发 错误:net::ERR_CLEARTEXT_NOT_PERMITTED
  • 深入理解malloc与vector:内存管理的对比
  • 多个输入框联合搜索
  • 笔记03----NeurIPS2024 涨点!SSA:用于语义分割的语义和空间自适应像素级分类器(即插即用)
  • 自定义比较函数 down 作为 sort 函数的参数实现数组元素从大到小排序
  • 在 Spring Boot 中使用 JPA(Java Persistence API)进行数据库操作
  • 简单聊聊PLT和GOT
  • FaRM译文
  • 用vue框架写一个时钟的页面
  • HTML表单-第二部分
  • PyQt5:一个逗号引发的闪退血案
  • AI智能体Prompt预设词指令大全+GPTs应用使用
  • SSM整合原理实战案例《任务列表案例》
  • 在风能市场持续增长的情况下,全球【环氧活性稀释剂】的需求呈现明显上涨的趋势
  • CSS一些小点 —— 12.7
  • [NeurlPS 2022] STaR 开源代码实现解读
  • Android笔记【15】跳转页面返回信息
  • 使用 Qt 打造高效的 .run 软件包管理器
  • python学opencv|读取视频(二)制作gif
  • 19. Three.js案例-创建一个带有纹理映射的旋转平面
  • ASP.NET|日常开发中常用属性详解
  • vscode CMakeLists中对opencv eigen的引用方法
  • 使用Goland对6.5840项目进行go build出现异常
  • Plugin - 插件开发06_开源项目JPom中的插件实现机制
  • 关于成功插入 SQLite 但没有数据的问题