本文将主要介绍mysql的InnoDB存储引擎的四种事务隔离级别,以及各个级别所能解决的问题(脏读、不可重复读、幻读)。

事务隔离级别有以下四种

  • Read Uncommitted 读未提交,即:一个事务可以读取另外一个事务未提交的数据
  • Read Committed 提交,即:一个事务只可以读取到另外一个事务已提交的数据,但无法读取到未提交的数据
  • Repeatable Read 重复读,即:在一个事务中,采用快照的方式,让其前后读取到的数据是一致的(注:当前事务所做的更新肯定是可以读到的)
  • Serializable 串行化,即:所有的操作采用加锁的方式,使之串行执行

读未提交(Read Uncommitted)

从其字面理解,未提交的数据可以被读到,或者准确说,A事务正在操作数据(增删改),但未提交事务,此时B事务可能就会读取到这些未提交的数据。也就是说,对于该隔离级别,脏读、不可重复读、幻读都会发生。

未提交读示例

存在脏读、

读提交

事务级别为,读到已提交数据。如下图所示:

读已提交

可重复读

采用一种快照机制,在一个事务中,前后读取到的数据是一致的。

可重复读

串行化

事务的最高级别,在每个操作的数据行上加锁,使各个操作互不冲突。

脏读、不可重复读、幻读介绍

  • 脏读:读取到脏数据
  • 不可重复读:指同一条数据,在多次读取的情况下,值不一样
  • 幻读:对于同一查询条件(比如范围查询),多次查询所得到的结果不一样。
 上一页

 评论