事务(Transaction)的特性和状态
事务管理
事务(Transaction):
1、构成单一逻辑工作单元的操作集合
DBMS中的用户程序
DBMS外的可执行程序
对数据库的读/写操作序列
2、读
从数据库中读取数据,首先从磁盘中读到内存(Buffer Pool),然后赋给变量。
3、写
先完成内存中的数据复制,然后写入磁盘。
事务的特性-ACID:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
事务的特性-原子性:
事务中的操作,要么全做成,要么都不做
事务是不可拆分的
事务必须以 Commit/Rollback 结束
事务的特性-一致性:
单独运行的事务,必须保证保持数据库的一致状态
从一个一致状态迁移到另一个一致状态
与原子性相关
事务的特性-隔离性:
多个并发事务之间不能相互干扰
并发不影响事务的执行
事务的特性-持久性:
一旦事务成功完成(Commit),它对数据库的更新应该是持久的
即使在写入磁盘之前,系统发生故障
在下次启动之后,也应保障数据更新的有效
事务及事务管理器:
恢复和并发控制是事务管理的重要组成部分
恢复管理部件负责保证事务的原子性与持久性
并发控制部件负责事务的并发控制机制,实现事务的隔离性与一致性
事务管理器实现事务的ACID
事务的提交与回滚:
提交( Commit
通知事务管理器一个逻辑工作单元已完成,所做的更新操作可以被提交或永久保留
表明事务成功地结束
执行有效性检验
回滚( RollBack)
通知事务管理器事务未能正常完成,数据库可能处于不一致状态,当前事务所做的所有更新操作必须撤消
表明事务不成功地结束
事务的状态:
活动状态(Active),初始状态,事务正在执行时处于此状态
部分提交状态,事务的最后一条语句被执行后
失败状态,发现正常的操作不能继续后
中止状态,事务回滚且数据库已恢复到事务开始时的状态
重启事务——不是由于内部逻辑错误导致的故障
杀死事务
提交状态,事务成功完成
事务的并发:
多个事务可能同时(交叉地)在系统中运行
提高处理器、磁盘的利用率
减少等待时间
多个事务并发运行,由事务管理器进行调度
可串行化调度
并发运行的结果,与事务按某一顺序串行运行的结果等同
- PROPAGATION_REQUIRED
Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行 - PROPAGATION_REQUES_NEW
该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可 - PROPAGATION_SUPPORT
如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务 - PROPAGATION_NOT_SUPPORT
该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码 - PROPAGATION_NEVER
该传播机制不支持外层事务,即如果外层有事务就抛出异常 - PROPAGATION_MANDATORY
与NEVER相反,如果外层没有事务,则抛出异常 - PROPAGATION_NESTED
该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。