①、脏读(Dirty reads):一个事务A正在修改数据并修改好(假设刚好修改好,这个线程睡了一分钟),但是还没有提交事务,这个时候恰好另一个事务B正在读取该数据,那么它会读取到未提交事务A已经修改好的数据。但是A这个时候发生异常回滚,这个时候事务B就再次读取不到A修改好的数据。这样就为脏读。注意:事务A和事务B的隔离级别均为:Isolation.READ_UNCOMMITTE
②、不可重复读(Nonrepeatable read):一个事务A中执行相同的查询两次或两次以上,但是两次查询之间这个时间段,B操作恰好修改了这条数据,那么A事务中的第二次查询出来的数据与第一条不一样,这样的情况为不可重复读。
③、可重复读(Repeatable Read):事务A正在先后两次查询一条数据,刚好在查询出第一条数据后,另一个操作B修改了这条数据,那么A事务中的第二次查询出来的数据与第一条一样,并没发生变化。
④、幻读(Phantom read):幻读与不可重复读类似。在org.springframework.transaction.annotation.Transactional中的事务隔离级别Isolation中幻读和不可重复读均使用READ_COMMITTED设置。幻读着重于所查询出的数据的量的多少是否在一个事务中前后一致。
⑤、ISOLATION_SERIALIZABLE:最高的隔离级别,能够防止脏读、不可重复读、可重复读、幻读。它能够确保数据的原子性查询,即:这个事务在执行中时,其它对这个表的所有修改、新增、删除操作均再等待这个操作的完成.相对来说,这样的设置,性能降低。