MySQL的事务隔离级别是怎么实现的?

KLEYYY 9月前 ⋅ 96 阅读

InnoDB支持四种隔离级别,每种级别解决掉的问题如下表:

脏读 不可重复读幻读 幻读
READ UNCOMMITTED Y Y Y
READ COMMITTED N Y Y
REPEATABLE READ(默认) N N N
SERIALIZABLE N N N

这四种隔离级别的实现机制如下:

  1. READ UNCOMMITTED & READ COMMITTED:

    通过Record Lock算法实现了行锁,但READ UNCOMMITTED允许读取未提交数据,所以存在脏读问题。而READ COMMITTED允许读取提交数据,所以不存在脏读问题,但存在不可重复读问题。

  2. REPEATABLE READ:

    使用Next-Key Lock算法实现了行锁,并且不允许读取已提交的数据,所以解决了不可重复读的问题。另外,该算法包含了间隙锁,会锁定一个范围,因此也解决了幻读的问题。

  3. SERIALIZABLE:

    对每个SELECT语句后自动加上LOCK IN SHARE MODE,即为每个读取操作加一个共享锁。因此在这个事务隔离级别下,读占用了锁,对一致性的非锁定读不再予以支持。


全部评论: 0

    我有话说: