为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为读取未提交(Read uncommitted)、读取已提交(Read committed)、可重复读(Repeatable read)、可串行化(Serializable)。
1.读取未提交(Read uncommitted)
读取未提交是最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
2.读取已提交(Read committed)
读取已提交允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
3.可重复读(Repeatable read)
可重复读是指对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读。可重复读能解决部分幻读问题。当A select的时候,是快照读,B insert多少条都不会影响A的读。但当A update的时候,就是当前读,会生成新的快照点,导致幻读问题出现。
4.可串行化(Serializable)
可串行化是最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。