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。

相关推荐
理想三旬11 分钟前
数据定义:模式、表、索引
数据库
c***871916 分钟前
讲解进阶之路:模块、包和异常处理-上篇
数据库·redis·哈希算法
!chen32 分钟前
Oracle分区表+本地索引 核心优化方案
数据库·oracle
叽里咕噜怪34 分钟前
MySQL-读写分离实验
数据库·mysql
生产队队长37 分钟前
Database:PLSQL中文乱码(查询显示问号???、表注释显示问号???)
数据库
饕餮争锋1 小时前
SQL LIKE 语句中下划线“_”是通配符
数据库·sql
霸王大陆1 小时前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-3
数据库·mysql·php
老华带你飞1 小时前
茶叶商城|基于SprinBoot+vue的茶叶商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot
我科绝伦(Huanhuan Zhou)1 小时前
Oracle性能优化方法论:从基线建立到问题根治
数据库·oracle·性能优化