事务的基本概念
本章都是重点。
基础知识和技能操作都会考察。
什么是事务Transaction?
事务是一系列数据库的操作,是数据库应用程序的基本逻辑单位。
即应用程序对数据库的操作都应该以事务的方式进行。
事务是一个操作序列
这些操作,“要么都做,要么不做”,是数据库环境中不可分割的逻辑工作单位。
一般一个程序可以包含多个事务。
事务的定义语句:
- (1)BEGIN TRANSACTION:事务开始;
- (2)END TRANSACTION:事务结束;
- (3)COMMIT:事务提交,该操作表示事务成功的结束,它将通知事务管理器该事物的所有更新操作现在可以被提交或永久保留;
- (4)ROLLBACK:事务回滚,该操作表示事务非成功的结束,它将通知事务管理器出故障了,数据库可能处于不一致的状态,该事物的所有更新操作必须回滚或撤销。
SQL标准规定当一条sql语句被执行,就隐式的开始了一个事务,SQL中的Commit work和Rollback work语句都是结束一个事务的标志。
(1)Commit work:提交当前事务,这意味着该事务所做的更新在数据库中永久保存,一旦事务提交,一个新的事务自动开始。
(2)Rollback work:回滚当前事务,这意味着将撤销该事务对数据库的更新,这样,数据库恢复到该事务执行第一条语句之前的状态。
注意:
若事务已执行Commit work就不能用Rollback work撤销。
数据库系统能够保证在发生诸如某天SQL语句错误、断电、系统崩溃的情况下,若事务还没有执行Commit work,则造成的影响将被回滚。
对断电、系统崩溃的情况,回滚实在系统重新启动时进行。
事务的特征
⭐ 五星考点
- 原子性 Atomicity:要么全做,要么全不做;
- 一致性 Consistency: 即数据不会因为事务的执行而遭受破坏。一致性可以有DBMS的完整性约束机制来自动完成。
- 隔离性 Isolation: 一个事务的执行不能被其他事务干扰。例如并发事务可能会对同一数据进行操作,但彼此应该不会互相干扰,是相互隔离的。
- 持久性 Durability: 一旦事务提交,对数据库的改变是永久的。即使系统出现故障。
⭐ 一致性 Consistency
是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
如A给B转账,不论转账的事务操作是否成功,其两者的存款总额不变(这是业务逻辑的一致性,至于数据库关系约束的完整性就更好理解了)。
保障机制(也从两方面着手):
数据库层面会在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,check约束等)和触发器设置;
此外,数据库的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
业务的一致性一般由开发人员进行保证,亦可转移至数据库层面。
::: danger
⭐ 持久性 Durability
这是最好理解的一个特性:持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。(完成的事务是系统永久的部分,对系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持)
write ahead logging:
SQL Server中使用了WAL(Write-Ahead Logging)技术来保证事务日志的ACID特性,在数据写入到数据库之前,先写入到日志,再将日志记录变更到存储器中。
:::
事务的状态
如果不出现故障,事务默认都能执行完成,一旦执行过程发生故障,不能执行完成的事务称之为中止事务;撤销中止事务对数据库的更新称为事务回滚;成功执行完成的事务称为已提交事务。
中止事务可以通过DBMS回滚恢复数据库,已提交事务不能回滚,但可以由程序员或DBA手动执行**“补偿事务”**撤销提交事务对数据库的影响。
事务的5种状态:
- 1.活动状态:事务的初始状态,事务执行时的状态。
- 2.部分提交状态:事务中最后一条语句(事务全部执行完,但实际输出可能还在内存中)被执行后的状态。
- 3.失败状态:事务不能继续正常执行的状态。
- 4.中止状态:事务回滚并且数据库已经恢复到事务开始执行前的状态,事务进入中止状态后,系统要么重启事务(软硬件错误引起的中止事务)要么杀死事务(事物内部的逻辑造成的错误或者输入错误等造成的中止事务)。
- 5.提交状态:事务在部分提交后,将往硬盘上写入数据,当最后一条信息写入后(事务成功完成)的状态,只有事务处于提交状态后才能说事务已经提交。

⚡ 相关真题
2014年45-46题
事务是一个操作序列,这些橾作(45)。
A.“可以做,也可以不做”,是数据库环境中可分割的逻辑工作单位
B.“可以只做其中的一部分”,是数据库环境中可分割的逻辑工作单位
C.“要么都做,要么都不做”,是数据库环境中可分割的逻辑工作单位
D.“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位
“当多个事务并发执行时,任何一个事务的更新操作直到其成功提交前的整个过程,对其他事务都是不可见的。“这一性质通常被称为事务的(46)性质。
(46)A.原子性 B.—致性 C.隔离性 D.持久性
【答案】D C
2015年56/57题
事务一旦提交,即使在写入数据库前数据尚在内存中而发生故障造成系统重启,该事务的执行结果也必须入数据库,该性质称为事务的(56),
A. 原子性 B. 一致性
C. 隔离性 D. 持久性
为保证这一性质,必须使用(57)。
A. 镜像 B. 数据库备份
C. 日志 D. 两段锁协议
【答案】D C
数据库故障会造成数据的不一致。
数据库的更新是由事务驱动的,事务的ACID属性被破坏是数据不一致的根本原因。
系统重启会使内存中更新过的数据未写入硬盘而丢失,破坏了事务的持久性,即事务一经提交,其对数据库的影响会体现到数据库中。
为保证事务发生故障后可恢复,DBMS使用日志。
即在对数据更新前,先将欲做的修改在日志中记录并写入硬盘,然后再进行数据更新。
当系统重启时,根据日志文件对数据进行恢复。