舷Kelvin 2023-03-15 23:54 采纳率: 61.5%
浏览 24

关于mysql事务的提交状态,这么理解对吗?

如题,学完MVCC机制后回味了一下,发现事务的提交操作好像完全不会反应在行记录本身的数据机构中,好像只是在某个记录所有事务状态的地方改了一下自己的状态。
然后别的事务,按照“读已提交”以上的规则来读时,是不是也跟MVCC类似,也是能拿到一连串当前记录的历史版本来视情况挑选的?
比如一个查询任务,拿到当前记录事务id后,得去对比一下该事务状态,哦还没提交,那我不用你,沿着指针去undo log里找上一版本;上一版本的事务id也拿出来对比一下,哦你的提交了,那就把你这条返回给客户端。
也就是这个“已提交”的状态完全不反映在记录本身上,而是通过将来的使用者(查询者)对比事务id、事务活跃列表等操作来“模拟”出类似查找已提交数据的效果。

不太确定我自己的理解对不对。主要是commit这个操作,印象中总是一大堆东西批量发送、批量打包、批量改状态的操作。但这里却只改一个事务id的对应状态,很小的一个值,等于这个行记录的提交状态本身并不存在,是到查询时才用一套逻辑综合对比判断出来的。有点反直觉,就有点不太确定自己的理解是不是有偏差。

  • 写回答

4条回答 默认 最新

  • threenewbee 2023-03-16 00:00
    关注

    事务是通过乐观锁悲观锁等机制实现的,更新的时候会将其余的挂起

    评论

报告相同问题?

问题事件

  • 修改了问题 3月15日
  • 修改了问题 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 铜与钢双金属板叠加在一起每种材料300mm长,18mm宽,4mm厚一端固定并加热至80℃,当加热端温度保持不变时另一端的稳态温度。ansys
  • ¥15 django5安装失败
  • ¥60 ios系统storm sniffer 写入http规则加密如何破解?
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上