Spring中的事务隔离级别和数据库中的事物隔离级别基本一直,Mysql中的InnoDb引擎中的事务隔离级别有四种,但是Spring中的事务隔离级别有五种。

首先说一下并发事务引起的问题有哪些

1.脏读:脏读发生在一个事务读取了另一个事务改写但尚未提交的数据时,如果改写在稍后回滚了,那么第一个事务获取的数据就是无效的。

2.不可重复读:不可重复读发生在一个事务执行相同的查询两次或者两次以上,但是每次都得到不同的数据时。这就通常是因为另一个并发事务在两次查询期间进行了更新。

3.幻读:幻读与不可重复读类似。它发生在一个事务读取了几行数据,接着另一个并发事务插入了一些数据时。在随后的查询中,第一个事务就会发现多了一些原本不存在的记录。

不可重复读与幻读的区别

1.不可重复读的重点是修改:同样的条件,你读取过的数据,再次读取出来发现值不一样了

2.幻读的重点在于新增或者删除:同样的条件,第一次和第二次读出来的记录数不一样。

3.从总的结果来看, 似乎不可重复读和幻读都表现为两次读取的结果不一致。但如果你从控制的角度来看, 两者的区别就比较大。 对于前者, 只需要锁住满足条件的记录。 对于后者, 要锁住满足条件及其相近的记录

spring事务隔离级别 mysql事务隔离界别 spring的事务隔离级别_数据

 

1》ISOLATION_DEFAULT  使用后端数据库默认的隔离级别。(ISOLATION [ˌaɪsəˈleɪʃn] 隔离)

2》ISOLATION_READ_UNCOMMITTED 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读

3》ISOLATION_READ_COMMITTED 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读不可重复读仍有可能发生。(脏读:发生在  一个事务读取了,另一个事务改写了但尚未提交到数据库的数据时。因为改写没有提交到数据库,所以可能会回滚。导致第一个事务读到的值无效)

4》ISOLATION_REPEATABLE_READ 一个事务中,对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改。可以阻止脏读和不可重复读,但幻读仍有可能发生不可重复读:一个事务中执行多次相同的查询时,读取到的值不同,重点在于修改update

5》ISOLATION_SERIALIZABLE   最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的。(幻读:一个事务中,2次或多次执行相同的查询时,得到的结果的行数不一样。重点在于增加insert和删除delete)