MVCC是如何保证隔离性的

之前提到了MVCC可以一定程度上避免幻读,那具体MVCC是咋工作的呢?

需要介绍两个机制:read view和聚簇索引的两个隐藏列

read view

这个就是我们理解的快照,有四个字段,本事务id、活跃事务id列表(包含自己)、活跃事务里id最小的(还没提交的事务里最早开始的)、下一个事务id(不一定是活跃事务列表中最大值+1)

聚簇索引中的隐藏列

trx_id代表本行数据是由哪个事务更新的,undo_log是关键的版本控制指针。就是用read view里的m_ids看这条记录对当前事务可见与否,可见就读不可见就顺着链表向下找。

工作方式

可重复读是启动事务时生成一个 Read View,然后整个事务期间都在用这个 Read View。

读提交是在每次读取数据时,都会生成一个新的 Read View。

相关推荐
祁思妙想1 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人1 小时前
1.MySQL之如何定位慢查询
数据库·mysql
秦歌6662 小时前
向量数据库-Milvus快速入门
数据库·milvus
Edingbrugh.南空3 小时前
Flink SQLServer CDC 环境配置与验证
数据库·sqlserver·flink
码不停蹄的玄黓3 小时前
MySQL分布式ID冲突详解:场景、原因与解决方案
数据库·分布式·mysql·id冲突
爱上语文4 小时前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Java初学者小白4 小时前
秋招Day14 - Redis - 应用
java·数据库·redis·缓存
丶意冷5 小时前
mybatisPlus分页方言设置错误问题 mybatisPlus对于Oceanbase的Oracle租户分页识别错误
java·数据库·oracle·oceanbase
时序数据说7 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
戒不掉的伤怀7 小时前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql