事务

来源:互联网 发布:国外网络赚钱项目 编辑:程序博客网 时间:2024/06/14 08:05

1. 概述

事务是由一组SQL语句组成的访问并更新数据库中各种数据项的一个程序执行单元。

1.1 事务的特性(ACID)

原子性(A):一个事务是一个不可分割的工作单位, 事务中任何一条SQL语句执行失败,整个事务将失败,执行成功的SQL语句将进行回滚。
一致性(C):事务将数据库从一种状态转变为另一种一致的状态,事务开始前和结束后数据库的完整性约束没有被破坏。
隔离性(I):事务的隔离性要求每个事务的对象对其他事务的操作对象相互分离, 即该事务提交前对其他事务都不可见,通常通过锁实现。
持久性(D): 事务一旦提交,其结果就是永久的。持久性保证事务的高可靠性, 而不是高可用性

1.2事务的分类

扁平事务 是事务中最简单的一种,扁平事务的主要限制是不能回滚或者提交事务的某一部分, 或分几个步骤提交
带有保存节点的扁平事务允许在事务执行过程中回滚到同一事务中较早的一个状态保存点用于记录事务的当前状态,以便事务恢复到保存点的状态。
链事务 可视为是保存点事务的一个变种, 带有保存点的事务在系统崩溃时,所有保存点都将消失。链事务在提交一个事务时,释放不需要的数据对象,将必要的处理上下文隐式的传给下一个要开始的事务。提交事务操作和开始事务操作为一个原子操作,链事务只能回滚到最近一个保存点。链事务commit之后会释放当前事务持有的锁。
嵌套事务 是一个层次结构框架,由一个顶层事务控制着下层各个事务。被嵌套的事务被称为子事务,子事务可以提交也可以回滚,但是子事务的提交操作只有在其父事务提交后才能生效.
分布式事务是在分布式环境下运行的扁平事务。

 2.事务的实现

事务的隔离性通过锁来实现,原子性、一致性和持久性通过数据库的redo log和undo log完成。redo log称为重做日志,用来保证事务的原子性和持久性。undo日志用来保证事务的一致性。(redo日志恢复提交事务修改的页操作, undo回滚行记录到某个特定版本。redo通常是物理日志,记录物理页修改操作。undo是逻辑日志,根据每行记录进行记录。

2.1 redo

重做日志用来实现事务的持久性,其由两个部分组成:一是内存中的重做日志缓冲;二是重做日志文件

2.1.1

事务持久性的实现:通过Force Log Commit机制实现,即当事务提交时,必须先将该事务的所有日志写入到重做日志文件进行持久化,待事务commit操作完成才算完成。

原创粉丝点击