spring:事务的5大隔离级别,7大传播行为

一、五大隔离级别

  ISOLATION_READ_UNCOMMITTED:读未提交

  ISOLATION_READ_COMMITTED:读已提交

  ISOLATION_REPEATABLE_READ:可重复读

  ISOLATION_SERIALIZABLE:串行化

  ISOLATION_DEFAULT:默认的隔离级别(不解释)

脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的

幻读:A事务读取B事务提交的新增数据,会引发幻读问题。幻读一般发生在计算统计数据的事务中,例如银行系统在同一个事务中两次统计存款账户的总金额,在两次统计中,刚好新增了一个存款账户,存入了100,这                     时候两次统计的总金额不一致。

不可重复读:不可重复读是指A事务读取了B事务已经提交的更改数据。假如A在取款事务的过程中,B往该账户转账100,A两次读取的余额发生不一致。

以上者三中情况如果和钱打上交易的话,那么就十分的恐怖了,可以幻想一下。

二、事物的其中传播行为

required:表示当前事务必须在一个有事务的上下文中运行,如果客户端有事务在运行,那么被调用端将在该事务中运行,否在重新开启一个事务(如果被调用端发生异常,那么,都将事务回滚。)

required_new:标识当前方法必须运行在它自己的事务中,一个新的事务启动,而且如果有一个现有的事务在运行的话,则这个事务将在运行期被挂起直到这个事务被提交或者回滚才执行

supports:表示当前方法不必须需要一个具有事物的额上下文,但是如果有的话,它也可以在这个事务中运行

not_supports:表示当前方法不应该在一个事务中运行,如果有的话,将被挂起,直到事务提交或者回滚才执行

mandatory:表示当前方法必须在一个事务中运行,没有的话将抛出异常

nested:表示当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务应该独立于被封装的事务中进行提交或者回滚。如果分装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回       滚,反之层事务不影响外层事务。如果封装事务不存在,则与required是一样的

never:表示该方法不应该运行在一个事务中,如果有,则抛出异常

 

四种隔离级别个七大传播行为看情况使用!!!!!!!!!!!!!  

 

posted @ 2019-03-03 19:34  葬月!  阅读(309)  评论(0编辑  收藏  举报