标签: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