mysql锁(六)innodb之事务的隔离级别

****事务隔离级别出现的原因****

任何一个方案的出现,都是为了解决问题,事务的隔离级别的出现,主要是为了解决并发事务(即两个事务同事运行)出现的问题。

****并发事务容易出现那些问题?****
(1)更新丢失问题
(2)一致性读问题,主要是脏读,不可重复读,幻读。

****注****:关于更新丢失以及脏读,不可重复读,幻读的详细解释,请看专门的介绍

****事务的隔离级别有哪些****
(1)read uncommited(读取未提交内容)
(2)read commited(读取已提交内容,简称RC)
(3)repeatable read(可重读,简称RR)
(4)serializable(可串行化)

****各个事务隔离级别之间的排序****
从read uncommited到serialize,隔离级别由低到高,read uncommited的隔离级别最低,serializable的隔离级别最高。

****各个事务隔离级别都处理了哪些问题****
read uncommited解决了更新丢失的问题,其原理是通过锁来实现,但不能解决脏读,不可重复读和幻读的问题。

read commited解决了更新丢失和脏读的问题,但不能解决脏读,不可重复读和幻读的问题。

repeatable read解决了更新丢失,脏读,不可能重复读,幻读的问题,其实现原理是通过间隙锁(间隙锁会在后面详细介绍)来实现。

serializable解决了并发事务所有的问题,通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。其原理是读自动加共享锁,写自动加排它锁的方式来实现来实现事务的串行化。

****对事务隔离级别的理解****
从read uncommited到serializable,隔离级别层层提高,由于其核心是使用锁来控制,因此锁超时和锁竞争的现象也随着隔离级别的上升而不断的出现,所以,我们在选用不同的隔离级别的时候要考虑好应对后期的锁竞争和超时的情况。

根据不同的隔离级别的特性,为我们后期分析不同隔离级别下,事务加了什么锁提供了可靠的分析依据。

****mysql下查看和设置隔离级别的技巧****

  • 查询事务隔离级别:
    select @@session.tx_isolation;

  • 设置隔离级别:
    set session transaction isolation level read uncommitted;(READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE)

推荐阅读更多精彩内容