1.读未提交(Read uncommitted):一个事务可以读取另一个未提交的事务。事务A读取未提交的事务B时,A看到的数据不是事 务B执行完成的最后数据,当事务B发现数据不对时立即回滚事务,这时事务A出现脏读。
2.读提交(Read committed):就是一个事务要等另一个事务提交后才能读取数据。若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据。当事务A进行第一次查询操作完成后,事务B进行UPDATE操作,这时事务A进行第二次查询操作,第二次查询的是事务B提交后的数据,所以事务A前后两次的查询结果出现差异,这就是不可重复读。读提交能解决脏读,却会出现不可重复读。
3.重复读(Repeatable read):就是在开始读取数据(事务开启)时,不再允许修改操作。重复读可以解决不可重复读的问题,但会带来幻读。事务A读取数据时,事务B进行插入操作并提交事务,这时事务A提交,发现事务A提交前后数据出现差异,就出现幻读。
4.序列化(Serializable):Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
public enum Isolation {
DEFAULT(-1),
READ_UNCOMMITTED(1),
READ_COMMITTED(2),
REPEATABLE_READ(4),
SERIALIZABLE(8);
}
org.springframework.transaction.annotation.Isolation
枚举类中定义了五个表示隔离级别的值,DEFAULT
为默认使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_COMMITTED
。