码迷,mamicode.com
首页 > 数据库 > 详细

MySQL InnoDB Engine--多版本一致性视图(MVCC)

时间:2020-01-13 23:36:38      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:span   日志   主键   class   版本   nod   lock   如何   values   

MySQL InnoDB存储引擎使用MVCC机制来提供一致性非锁定读((consistent nonlocking read)。

 

假设现在有表TB001,其表结构为:

CREATE TABLE `TB001` (
  `ID` VARCHAR(20) NOT NULL,
  `C1` VARCHAR(20) NOT NULL,
  `C2` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `IDX_C1` (`C1`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

步骤1:事务TX1001在12:00时插入一条记录

 INSERT INTO TB001(ID,C1,C2)
 VALUES(‘AA0001‘,‘BB0001,‘CC0001);

在主键索引/二级索引/重做日志中数据如下:

技术图片

 

步骤2:事务TX1003更新数据但未提交:

UPDATE TB001 
SET C2=‘CC1111‘
WHERE ID=‘AA0001‘

步骤3:事务TX99999999999开启可重复读事务,开启事务执行第一条SQL语句时:

A、当前所有TX1001及之前事务都已提交

B、当前写事务最大ID为TX1004

C、事务TX1002和TX1004都已提交

D、事务TX1003未提交

 

步骤4:事务TX1003提交更新,更新后在主键索引/二级索引/重做日志中数据如下:

技术图片

 

步骤5:事务TX1005执行更新并提交:

UPDATE TB001 
SET C1=‘BB1111‘ WHERE ID=‘AA0001‘

更新后在主键索引/二级索引/重做日志中数据如下:

技术图片

 

步骤6:事务TX1007执行删除并提交:

DELETE FROM TB0001 
WHERE ID=AA0001

更新后在主键索引/二级索引/重做日志中数据如下:

技术图片

 

步骤7:事务TX99999999999执行查询:

SELECT * 
FROM TB001
WHERE C1=BB0001

查询如何执行呢?

MySQL InnoDB Engine--多版本一致性视图(MVCC)

标签:span   日志   主键   class   版本   nod   lock   如何   values   

原文地址:https://www.cnblogs.com/gaogao67/p/12189872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!