2018-04-19Spring事务

spring事务分为:5大隔离级别(数据库4大隔离级别) 7大传播属性

隔离级别理解就是对数据操作的隔离性操作,脏读  重复读 幻读   传播属性:就是事务的支持  默认是 支持当前事务如果B 没有事务创建一个一样的事务   多种不同的事务支持方式(还有可以能多种事务如果一个事务成功了,其他的失败了成功的提交失败的回滚)    

数据库数据要保持数据的:原子性 一致性 隔离性 持久性 

MySQL数据库为我们提供的四种隔离级别:

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。a 修改数据 但是b 加了一条数据  没有批量修改到

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。  a 

  ③ Read committed (读已提交):可避免脏读的发生。a 读数据了 b去修改了 a 再去读数据修改了

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。 a 读没提交,b读数据了 a 又回滚了

Spring事务的传播属性

由上图可知,Spring定义了7个以PROPAGATION_开头的常量表示它的传播属性。

名称值解释

PROPAGATION_REQUIRED0支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择,也是Spring默认的事务的传播。

PROPAGATION_SUPPORTS1支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY2支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW3新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED4以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER5以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED6如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

Spring事务的隔离级别

名称值解释

ISOLATION_DEFAULT-1这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应

ISOLATION_READ_UNCOMMITTED1这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻读。

ISOLATION_READ_COMMITTED2保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。

ISOLATION_REPEATABLE_READ4这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻读。

ISOLATION_SERIALIZABLE8这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻读。

你可能感兴趣的:(2018-04-19Spring事务)