mysql上验证快照隔离

本文在mysql上验证快照隔离的特性。参考文章

创建数据库

1
2
3
4
5
6
7
8
9
create database demo;
use demo;
CREATE TABLE test
(
tid INT NOT NULL primary key,
tname VARCHAR(50) NOT NULL
);
INSERT INTO test VALUES(1,'version1');
INSERT INTO test VALUES(2,'version2');
image-20220715113204595

连接一

1
2
3
4
USE demo;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
UPDATE test SET tname='version3' WHERE tid=2;
SELECT * FROM test;
image-20220715113440161

可以看到连接一中数据已被修改。

连接二

1
2
3
USE demo;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
SELECT * FROM test;
image-20220715113625028

由于事务一(连接一)还没有提交,因此连接二看到的是version2而不是version3。

commit

image-20220715114056294

即使连接一commit之后,连接二在当前事务中也不能看到最新的版本version3。

image-20220715114239913

而当连接二commit退出当前事务后,便能够看到version3了。