1.read uncommitted未提交读
用户可以读取到当前未提交的数据 属于脏读QAQ 没啥用
2.read committed 不可重复读(RC)
用户不会再出现脏读的情况,但是RC模式下,会出现重复读而结果不同的情况。
ex:
T1:select * from test;
T2:insert into test values (1,'aa');
T1:select * from test;
T1两次读取的过程结果不同。
3.repeatable read 可重复读(RR)
在innodb中使用了快照的方式,当前事务不会读取其他事务的修改。
T1 select * from test
T2insert into test values (1,'aa');
T1insert into test values(1,'aa')
但是此处有一个疑惑尚待解决,高性能mysql说Innodb引擎利用mvcc解决了幻读 ,但是根据上述代码,并没有啊,还是在并没有查询到ID为1的情况下,就被阻塞了。这真的解决了吗
T1提交被阻塞。
MVCC的select要满足两个条件
1.只读取创建时间小于或者等于当前版本号的行
2.删除版本要么比当前事务ID大,要么undefined。(确保当前事务开始之前该行未被删除)
4.Serializable
强制串行化。