MySQL 事务隔离级别

读未提交(read-uncommitted)

所有事务都可以看到其他未提交事务的执行结果。

很少实际应用,因为性能上既不比其他级别好,也会产生脏读幻读

不可重复读(read-committed)

大部分数据库默认隔离级别,但是非MySql默认级别。

一个事务只能看见已经提交事务所做的改变,会产生幻读

可重复读(repeatable-read)

MySql默认事务隔离级别,此级别确保同一事务的多个实例在并发读取数据时,会看见同样的数据行。

同样会产生幻读。

序列化(serializable)

最高隔离级别,强制事务排序执行,使之不可能互相冲突,从而解决幻读问题,即在行上加上共享锁,这个级别,可能导致大量超时现象和锁竞争。

读取产生的问题

脏读

事务A读取了事务B更新的数据,然后事务B回滚了,A读到的就是脏数据

幻读(phantom read)

在读取某一范围的数据行时,另一个事务在该范围内插入新行,当用户再读取该范围的数据行,就会发现新的幻影行。

InnoDB 和 FaLcon 存储引擎通过多版本并发控制机制解决了该问题。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1

意思是InnoDB 会解决可重复读的幻读问题?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!