前言
MySQL的innoDB引擎虽然拥有标准的四级隔离级别,不过它有其他数据库不同,就是在可重复读 RR 级别下面已经可以防止幻读的发生。所谓幻读,指的是事务A执行过程中,由于事务B并发插入或删除了多条新数据,事务A两次读数据的行数不一样,出现了“虚幻”的新纪录(phantom,幽灵)。
一、快照读(snapshot read)
在快照读(snapshot read)的情况下,MySQL通过MVCC(多版本并发控制)来避免幻读。
原理:将历史数据存一份快照,所以其他事务增加与删除数据,对于当前事务来说是不可见的。
快照读,读取的是记录的可见版本 (有可能是历史版本),不用加锁。主要应用于无需加锁的普通查询(select)操作。
快照读sql语句如下
select * from