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

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'

查询如何执行呢?

猜你喜欢

转载自www.cnblogs.com/gaogao67/p/12189872.html