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。

相关推荐
明月醉窗台19 分钟前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go1 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局1 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务2 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
一只爱撸猫的程序猿3 小时前
构建一个简单的智能文档问答系统实例
数据库·spring boot·aigc
nanzhuhe3 小时前
sql中group by使用场景
数据库·sql·数据挖掘
消失在人海中3 小时前
oracle sql 语句 优化方法
数据库·sql·oracle
Clang's Blog3 小时前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr
zzc9214 小时前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
未来之窗软件服务4 小时前
JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟数据库