事务
- 什么是事务
- 要么都成功,要么都失败
- 典型场景:银行转账
- 事务的四个特性(ACID)
- 原子性(Atomicity):
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间的某个环节。
事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像事务从来没执行过一样 - 一致性(Consistency):
在事务开始前和结束后,数据库的完整性没有被破坏。 - 隔离性
数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时
由于交叉执行而导致的数据不一致。事务隔离分为:读提交,读未提交,可重复度和串行化 - 持久性
事务处理结束后,对数据的修改是永久的。
- 事务的传播性
- REQUIRED(对内层【被调用的方法】来说)
如果当前(外部方法)存在事务则加入该事务(相当于把内部代码直接写到外部方法中,只会存在一个事务)
,如果当前(外部)没有事务,则(内部方法)创建一个新的事务 - REQUIRED_NEW
创建一个新事务,如果当前存在事务,则把当前事务挂起
(这个新的事务只对内层有效,外部发生异常不影响内部的提交,内部发生异常就回滚,如果内部的异常处理掉,外部感知不到,外部不会回滚) - NESTED
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行(子事务);如果没有事务则创建一个新事务 - NEVER
以非事务方式运行,如果当前存在事务,则抛出异常 - NOT_SUPPORTED
以非事务方式运行,如果当前存在事务,则把当前事务挂起 - MANDATORY
如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常 - SUPPORTS
如果当前存在事务,则加入该事务,如果当前没有事务则以非事务的方式继续运行