首页 > 社交 > 科普中国

面渣逆袭:MySQL六十六问,两万字+五十图详解!有点六

常驻编辑 科普中国 2022-06-22 字段   路由   详解   索引   事务   版本   操作   数据库   引擎   数据   日志
70s拜客生活常识网

假如有一张user表,表中只有一行记录,当时插入的事务id为80。此时,该条记录的示例图如下:70s拜客生活常识网

70s拜客生活常识网

在这里插入图片描述70s拜客生活常识网

接下来有两个DB_TRX_ID分别为100200的事务对这条记录进行update操作,整个过程如下:70s拜客生活常识网

70s拜客生活常识网

update操作70s拜客生活常识网

由于每次变动都会先把undo日志记录下来,并用DB_ROLL_PTR指向undo日志地址。因此可以认为,对该条记录的修改日志串联起来就形成了一个版本链,版本链的头节点就是当前记录最新的值。如下:70s拜客生活常识网

70s拜客生活常识网

MVCC70s拜客生活常识网

ReadView70s拜客生活常识网

对于Read CommittedRepeatable Read隔离级别来说,都需要读取已经提交的事务所修改的记录,也就是说如果版本链中某个版本的修改没有提交,那么该版本的记录时不能被读取的。所以需要确定在Read CommittedRepeatable Read隔离级别下,版本链中哪个版本是能被当前事务读取的。于是就引入了ReadView这个概念来解决这个问题。70s拜客生活常识网

Read View就是事务执行快照读时,产生的读视图,相当于某时刻表记录的一个快照,通过这个快照,我们可以获取:70s拜客生活常识网

70s拜客生活常识网

事务和ReadView70s拜客生活常识网

  • m_ids :表示在生成 ReadView 时当前系统中活跃的读写事务的事务id 列表。
  • min_trx_id :表示在生成 ReadView 时当前系统中活跃的读写事务中最小的 事务id ,也就是 m_ids 中的最小值。

相关阅读:

  • 字段类型有哪些(字段长度怎么设置)
  • 技术人必备的接口测试神器:apifox、apipost、yapi,实用
  • 我做开发测试犯的错
  • 基于SpringBoot微服务开发中的异常处理最佳实践
  • MySQL专题1:
  • 你今天玩游戏了吗?游戏道具了解下
  • 什么是CSRF
  • 最全SQL
  • 云原生(十四)
  • MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。