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