Mysql学习——事务的隔离级别
一、什么是事务
在Mysql中,事务指的是一组操作,可以理解为一组sql语句,事务有如下特性:
原子性:事务要么全部执行完成,要么一个都没有执行。
隔离性:两个事物之间是不能影响的。
一致性:事物执行后,数据库从一个一致性状态到另外一个一致性状态。
持久性:事务执行后,结果会持久在磁盘上。
二、事务并发遇到的问题
脏写:一个事务修改了另一个未提交事务修改过的数据。
脏读:一个事务读到了另一个未提交事务修改过的数据。
不可重复读:一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值。
幻读:个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来。
严重程度:脏写 > 脏读 > 不可重复读 > 幻读
二、隔离级别
为了对事务并发遇到的问题进行响应的处理,就引出了隔离级别,隔离级别越低,越严重的问题就越有可能发生。不同的隔离级别,事物并发发生的问题也就不一样。隔离级别的原理是舍弃了一部分隔离性来换取一部分性能。
未提交读(READ UNCOMMITTED),可能发生脏读、不可重复读和幻读问题。
已提交读(READ COMMITTED),可能发生不可重复读和幻读问题,但是不可以发生脏读问题。
可重复读(REPEATABLE READ),可能发生幻读问题,但是不可以发生脏读和不可重复读的问题。
可串行化(SERIALIZABLE),各种问题都不可以发生。
Mysql默认的隔离级别是可重复读。我们可以根据业务需要自行设置隔离级别。