MySQL 事务隔离级别
读未提交(read-uncommitted)
所有事务都可以看到其他未提交事务的执行结果。
很少实际应用,因为性能上既不比其他级别好,也会产生脏读
和幻读
。
不可重复读(read-committed)
大部分数据库默认隔离级别,但是非MySql默认级别。
一个事务只能看见已经提交事务所做的改变,会产生幻读
。
可重复读(repeatable-read)
MySql默认事务隔离级别,此级别确保同一事务的多个实例在并发读取数据时,会看见同样的数据行。
同样会产生幻读。
序列化(serializable)
最高隔离级别,强制事务排序执行,使之不可能互相冲突,从而解决幻读问题,即在行上加上共享锁,这个级别,可能导致大量超时现象和锁竞争。
读取产生的问题
脏读
事务A读取了事务B更新的数据,然后事务B回滚了,A读到的就是脏数据
幻读(phantom read)
在读取某一范围的数据行时,另一个事务在该范围内插入新行,当用户再读取该范围的数据行,就会发现新的幻影行。
InnoDB 和 FaLcon 存储引擎通过多版本并发控制机制解决了该问题。
本作品采用《CC 协议》,转载必须注明作者和本文链接
意思是InnoDB 会解决可重复读的幻读问题?