MVCC 在RC 和 RR 隔离等级下的工作机制
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,一.数据行隐藏列innodb为每行记录都实现了三个隐藏字段6字节的事务ID(DB_TRX_ID)7字节的回滚指针(DB_ROLL_PTR)隐藏的ID事务1修改行值过程:X锁锁定该行 -> 记录redo
千家信息网最后更新 2026年11月03日MVCC 在RC 和 RR 隔离等级下的工作机制
一.数据行隐藏列
innodb为每行记录都实现了三个隐藏字段
6字节的事务ID(DB_TRX_ID)
7字节的回滚指针(DB_ROLL_PTR)
隐藏的ID
事务1修改行值过程:
X锁锁定该行 -> 记录redo log -> 把该行修改前的值copy至undo -> 修改当前行的值,填写事务编号,使回滚指针指向undo log中的修改前的行
事务2修改行值过程:
与事务1相同,此时undo log,中有有两行记录,并且通过回滚指针连在一起
二.RC 和 RR 适用MVCC的过程
三.MVCC读类型
1.快照读
读取的是记录的可见版本,或是从undo中读取的历史版本。
普通的查询即为快照读
2.当前读
读取的是记录的最新版本,会与dml语句发生阻塞。
select * from table where ? lock in share mode;
select * from table where ? for update;
转载:
作者: mark_rock
链接:http://www.imooc.com/article/17290?block_id=tuijian_wz
来源:慕课网
一.数据行隐藏列
innodb为每行记录都实现了三个隐藏字段
6字节的事务ID(DB_TRX_ID)
7字节的回滚指针(DB_ROLL_PTR)
隐藏的ID
事务1修改行值过程:
X锁锁定该行 -> 记录redo log -> 把该行修改前的值copy至undo -> 修改当前行的值,填写事务编号,使回滚指针指向undo log中的修改前的行
事务2修改行值过程:
与事务1相同,此时undo log,中有有两行记录,并且通过回滚指针连在一起
二.RC 和 RR 适用MVCC的过程
| RC |
| 事务开始 |
| (1).执行SQL语句之前,将系统中非当前活跃事务信息输出到一个副本trx_list |
| (2).用户在当前SQL开始读取记录,假设读取到的记录事务ID为trx_id_0 |
| (3).找出trx_list 中最早的事务trx_id_1 和 最晚的事务trx_id_2 |
| (4).如果trx_id_0 |
| (5).如果trx_id_0>trx_id_2 则表示该行记录在本SQL执行之后发生了其他事务,因此该行不可见。转至(7) |
| (6).如果trx_id_1<=trx_id_0<=trx_id_2 则表示该行记录在本SQL开启时处于活动状态,因此该行不可见。转至(7) |
| (7).从该行记录的DB_ROLL_PTR指针所指向的回滚段中取出最新的undo-log的版本号,将它赋值该trx_id_0,然后跳到步骤(4) |
| (8).将该行的数据返回给用户,跳转至(2) |
| (9).所有记录遍历完毕,关闭trx_list,跳转至(1),执行下一条SQL |
| 事务结束 |
| RR |
| 事务开始,将系统中非当前活跃事务信息输出到一个副本trx_list |
| (1).执行SQL语句 |
| (2).用户在当前本事务开始读取记录,假设读取到的记录事务ID为trx_id_0 |
| (3).找出trx_list 中最早的事务trx_id_1 和 最晚的事务trx_id_2 |
| (4).如果trx_id_0 |
| (5).如果trx_id_0>trx_id_2 则表示该行记录在本事务开启之后发生了其他事务,因此该行不可见。转至(7) |
| (6).如果trx_id_1<=trx_id_0<=trx_id_2 则表示该行记录在本事务开启时处于活动状态,因此该行不可见。转至(7) |
| (7).从该行记录的DB_ROLL_PTR指针所指向的回滚段中取出最新的undo-log的版本号,将它赋值该trx_id_0,然后跳到步骤(4) |
| (8).将该行的数据返回给用户,跳转至(2) |
| (9).所有记录遍历完毕,跳转至(1),执行下一条SQL |
| 事务结束,关闭trx_list |
三.MVCC读类型
1.快照读
读取的是记录的可见版本,或是从undo中读取的历史版本。
普通的查询即为快照读
2.当前读
读取的是记录的最新版本,会与dml语句发生阻塞。
select * from table where ? lock in share mode;
select * from table where ? for update;
转载:
作者: mark_rock
链接:http://www.imooc.com/article/17290?block_id=tuijian_wz
来源:慕课网
事务
指针
版本
用户
指向
数据
语句
过程
信息
副本
字节
快照
步骤
状态
系统
中非
活动
输出
普通
相同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云南咖啡
南京欣网互联网络科技有限公司
互联网与科技金融数据
金融科技创新监管互联网金融
深圳互联网络科技有限公司
善班互联网科技有限公司
互联网科技缩写
壕鑫互联网络科技
电子科技大学互联网
互联网科技公司的市场部门
互联网实体化科技化
济南华为互联网科技产业总部基地
互联网科技实习生岗位职责
如何创新互联网科技
互联网科技如何创业
群盈汇互联网科技有限公司
互联网公司高科技产品
广州富喜互联网络科技
世界互联网科技成果奖
科技互联网专业务虚会材料
手磨咖啡
南京欣网互联网络科技
上海睿民互联网科技有限公司
互联网科技官网
广州宏创互联网科技
远拓互联网科技
壕鑫互联网络科技
中和天地互联网科技有限公司
江苏互联网智能科技软件
互联网科技收购价值