mysql的innodb引擎下四种隔离级别,以及不同隔离级别下事务并发的结果。

一、Innodb的四种隔离级别

  • 读未提交
  • 读提交
  • 可重复读
  • 串行化
     不同事务的隔离级别,实际上是一致性与并发性的一个权衡与折衷。

二、不同隔离级别下事务并发结果。

    InnoDB使用不同的锁策略(Locking Strategy)来实现不同的隔离级别。

1.读未提交(Read Uncommitted)
这种事务级别下,select语句不加锁。
此时,可能读取到不一致的数据,并发行最高一致性最低。
2.串行化(Serializable)
这种事务事务级别下如果有未提交的数据修改某些行,所有读取这些行的select都会被阻塞住。
这是一致性最好的,但并发性最差的隔离级别。
在互联网大数据量,高并发量的场景下,几乎不会使用上述两种隔离级别。
3.可重复读(Repeated Read, RR)
这是InnoDB默认的隔离级别。
普通select快照读,锁select /update /delete 根据查询条件情况,会选择记录锁,或者间隙锁/临键锁,以防止读取到幻影记录;
4.读提交(Read Committed, RC)
这是互联网最常用的隔离级别,在RC下:

(1)普通读是快照读;
(2)加锁的select, update, delete等语句,除了在外键约束检查(foreign-key constraint checking)以及重复键检查(duplicate-key checking)时会封锁区间,其他时刻都只使用记录锁;
此时,其他事务的插入依然可以执行,就可能导致,读取到幻影记录。

你可能感兴趣的:(mysql的innodb引擎下四种隔离级别,以及不同隔离级别下事务并发的结果。)