mysql innodb 幻读测试

//查看隔离级别

select @@global.tx_isolation,@@tx_isolation;  

select @@global.transaction_isolation,@@transaction_isolation;//mysql8

//设置隔离级别为可重复读

set global tx_isolation='repeatable-read';

set session tx_isolation='repeatable-read'; 

测试结果(mysql 8;innodb引擎):

事务A

事务B

#REPEATABLE-READ 幻读演示

 

BEGIN;#1

INSERT INTO test(a,b) VALUES (1,2);#4

SELECT * FROM test;#5 三条结果

COMMIT;#7

SELECT * FROM test;#8 三条结果

#REPEATABLE-READ 幻读演示(不会读到其它事务插入数据,没有发生幻读)

 

BEGIN;#2

SELECT * FROM test;#3 两条结果

SELECT * FROM test;#6 两条结果

SELECT * FROM test;#9 两条结果

COMMIT;#10 END

SELECT * FROM test;#11 三条结果

#REPEATABLE-READ 幻读演示

 

 

BEGIN;#1

SELECT * FROM test;#3 三条数据,id=4的不存在

INSERT INTO test(id,a,b) VALUES (4, 1,2); #4,插入id=4

COMMIT;#6

#REPEATABLE-READ 幻读演示(没有读到,但是插入会报错)

 

 

BEGIN;#2

SELECT * FROM test;#3 三条数据,id=4的不存在

SELECT * FROM test;#5 三条数据,id=4的不存在,但其它事务已插入

SELECT * FROM test;#7 三条数据,id=4的不存在,但其它事务已插入,且提交

INSERT INTO test(id,a,b) VALUES (4, 1,2);#8 插入失败,id=4冲突

SELECT * FROM test;#8 三条数据,id=4的不存在

COMMIT;#9 END

SELECT * FROM test;#110 四条结果

#REPEATABLE-READ 幻读演示

 

BEGIN;#1

SELECT * FROM test;#3 id=7的不存在

INSERT INTO test(id,a,b) VALUES (7, 1,2); #4,插入id=7

COMMIT;#5

SELECT * FROM test;#8 id=7的存在,且b=2

SELECT * FROM test;#10 id=7的存在,且b=999

#REPEATABLE-READ 幻读演示(虽然没有读到,但是能更新成功,且更新后就能读到了)

 

BEGIN;#2

SELECT * FROM test;#3 id=7的不存在

UPDATE test SET b = 999 WHERE id = 7; #6 更新成功

SELECT * FROM test;#7 id=7的存在,且b=999

COMMIT;#9 END

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值