深入理解分布式事务:原理与实战
上QQ阅读APP看书,第一时间看更新

3.3 Spring事务隔离级别

Spring中存在5种隔离级别,分别为ISOLATION_DEFAULT、ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、ISOLATION_REPEATABLE_READ、ISOLATION_SERIALIZABLE。本节简单介绍一下这些事务隔离级别。

1.ISOLATION_DEFAULT隔离级别

ISOLATION_DEFAULT隔离级别是Spring中PlatformTransactionManager默认的事务隔离级别。也就是说,将Spring的事务隔离级别设置为ISOLATION_DEFAULT时,Spring不做事务隔离级别的处理,会直接使用数据库默认的事务隔离级别。

2.ISOLATION_READ_UNCOMMITTED隔离级别

ISOLATION_READ_UNCOMMITTED隔离级别是Spring中最低的隔离级别。当Spring中的隔离级别设置为ISOLATION_READ_UNCOMMITTED时,事务A能够读取到事务B未提交的数据。这种隔离级别下会产生脏读、不可重复读和幻读的问题。相当于MySQL中的未提交读隔离级别。

3.ISOLATION_READ_COMMITTED隔离级别

ISOLATION_READ_COMMITTED隔离级别能够保证事务A修改的数据提交之后才能被事务B读取,事务B不能读取事务A未提交的数据。在这种隔离级别下,虽然脏读的问题解决了,但是可能会产生不可重复读和幻读的问题。相当于MySQL中的已提交读隔离级别。

4.ISOLATION_REPEATABLE_READ隔离级别

ISOLATION_REPEATABLE_READ隔离级别能够保证不会产生脏读和不可重复读的问题,但是可能会产生幻读的问题。事务A第一次按照一定的查询条件从数据表中查询出数据后,事务B向同一个数据表中插入了符合事务A查询条件的数据,事务A再次从数据表中查询数据时,会将事务B插入的数据查询出来。相当于MySQL中的可重复读隔离级别。

5.ISOLATION_SERIALIZABLE隔离级别

在ISOLATION_SERIALIZABLE隔离级别下,事务只能够按照特定的顺序执行,也就是多个事务之间只能够按照串行化的顺序执行。这是最可靠的隔离级别,然而这种可靠性付出了极大的代价,也就是牺牲了并发性,相当于MySQL中的串行化隔离级别。