vlambda博客
学习文章列表

Mysql学习——事务的隔离级别

一、什么是事务


在Mysql中,事务指的是一组操作,可以理解为一组sql语句,事务有如下特性:

  • 原子性:事务要么全部执行完成,要么一个都没有执行。

  • 隔离性:两个事物之间是不能影响的。

  • 一致性:事物执行后,数据库从一个一致性状态到另外一个一致性状态。

  • 持久性:事务执行后,结果会持久在磁盘上。


二、事务并发遇到的问题


  • 脏写:一个事务修改了另一个未提交事务修改过的数据。

  • 脏读:一个事务读到了另一个未提交事务修改过的数据。

  • 不可重复读:一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值。

  • 幻读:个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来。


严重程度:脏写 > 脏读 > 不可重复读 > 幻读


二、隔离级别


为了对事务并发遇到的问题进行响应的处理,就引出了隔离级别,隔离级别越低,越严重的问题就越有可能发生。不同的隔离级别,事物并发发生的问题也就不一样。隔离级别的原理是舍弃了一部分隔离性来换取一部分性能。


  • 未提交读(READ UNCOMMITTED),可能发生脏读、不可重复读和幻读问题。

  • 已提交读(READ COMMITTED),可能发生不可重复读和幻读问题,但是不可以发生脏读问题。

  • 可重复读(REPEATABLE READ),可能发生幻读问题,但是不可以发生脏读和不可重复读的问题。

  • 可串行化(SERIALIZABLE),各种问题都不可以发生。


Mysql默认的隔离级别是可重复读。我们可以根据业务需要自行设置隔离级别。