事务的特性 ACID
A 原子性:事务中不可分割的一个单元,事务中的全部操作要么全部成功,要么全部失败
C 一致性:事务完成时必须一致
I 隔离性:一个事务的执行不受其他事务的影响,也就是一个事务的内部操作和使用的数据对并发的其他事物是隔离的,并发执行的各个事务之间不能相互影响。
D 持久性:一个事务一旦提交,对数据库的修改是永久性的
事务的隔离级别
隔离级别\并发问题出现的原因 | 解决脏读 | 解决不可重复读 | 解决幻读 |
---|---|---|---|
未提交读(READ_UNCOMMITTED) | N | N | N |
已提交读(READ_COMMITTED) | Y | N | N |
可重复读(REPEATABLE_READ ) | Y | Y | N |
串行化(SERIALIZABLE) | Y | Y | Y |
Spring事务的七种传播特性
required:表示如果当前存在一个事务,则加入该事务,否则新建一个事务;(默认)
requires_new:表示不管是否存在事务,都创建一个新的事务,把原来的事务挂起,新的事务执行完毕,继续执行老的事务
supports:如果当前存在事务,就加入该事务,如果没有事务,那就不使用事务。
not_supported:表示不使用事务,如果当前存在事务,就把当前事务暂停,以非事务执行
mandatory:表示必须在一个已有的事务中执行,如果当前没有事务,则抛出异常。
never:表示以非事务方式执行,如果当前存在事务则抛异常
nested:嵌套事务:存在事务则在嵌套事务内执行;不存在事务则创建一个新的事务。
嵌套事务使用数据库中的保存点来实现,即嵌套事务回滚不影响外部事务,但外部事务回滚将导致嵌套事务回滚。
Spring事务的回滚规则
-
Spring事务默认只对
运行时异常[非检查型]
起作用(也就是出现运行时异常时,回滚数据); -
Spring事务默认对
非运行时异常[检查型异常、编译期异常]
不起作用; -
可以使用
rollbackFor
指定Spring事务对哪些异常起作用; -
可以使用
noRollbackFor
指定Spring事务对哪些异常不起作用; -
timeout 超时时间