- 关系数据库设计
- DBMS - 数据库规范化
- DBMS - 数据库连接
- 存储和文件结构
- DBMS - 存储系统
- DBMS - 文件结构
- 事务和并发
- DBMS - 事务
- DBMS - 并发控制
- DBMS - 死锁
- 备份和恢复
- DBMS - 数据备份
- DBMS - 数据恢复
- DBMS 有用资源
- DBMS - 快速指南
- DBMS - 有用资源
- DBMS - 讨论
DBMS - 事务
事务可以定义为一组任务。单个任务是最小的处理单元,不能再细分。
让我们来看一个简单的交易示例。假设银行职员将 500 卢比从 A 的账户转到 B 的账户。这个非常简单的小型交易涉及多个低级任务。
A 的账户
Open_Account(A) Old_Balance = A.balance New_Balance = Old_Balance - 500 A.balance = New_Balance Close_Account(A)
B 的账户
Open_Account(B) Old_Balance = B.balance New_Balance = Old_Balance + 500 B.balance = New_Balance Close_Account(B)
ACID 属性
事务是程序中非常小的单元,它可能包含多个低级任务。数据库系统中的事务必须维护原子性、一致性、隔离性和持久性——通常称为 ACID 属性——以确保准确性、完整性和数据完整性。
原子性 - 此属性规定必须将事务视为原子单元,即要么执行其所有操作,要么不执行任何操作。数据库中一定不能存在事务部分完成的状态。状态应在事务执行之前或事务执行/中止/失败之后定义。
一致性 - 任何事务后,数据库都必须保持一致状态。任何事务都不应对数据库中驻留的数据产生任何不利影响。如果数据库在事务执行之前处于一致状态,则在事务执行之后也必须保持一致状态。
持久性 - 数据库应该足够持久,即使系统发生故障或重启也能保存所有最新的更新。如果事务更新数据库中的一块数据并提交,则数据库将保存修改后的数据。如果事务提交但系统在数据写入磁盘之前发生故障,则系统恢复运行后将更新该数据。
隔离性 - 在数据库系统中,多个事务同时并行执行时,隔离性属性规定所有事务都将被执行,就好像它是系统中唯一的事务一样。任何事务都不会影响任何其他事务的存在。
可串行化
当多个事务在多编程环境中由操作系统执行时,可能存在一个事务的指令与其他事务的指令交错的情况。
调度 - 事务的按时间顺序执行序列称为调度。调度中可以有多个事务,每个事务包含许多指令/任务。
串行调度 - 这是一种调度,其中事务以一种方式对齐,即一个事务首先执行。当第一个事务完成其周期后,则执行下一个事务。事务一个接一个地排序。这种类型的调度称为串行调度,因为事务以串行方式执行。
在多事务环境中,串行调度被视为基准。事务中指令的执行顺序不能更改,但是两个事务可以以随机方式执行其指令。如果两个事务相互独立并在数据的不同段上工作,则此执行不会造成任何损害;但是,如果这两个事务正在处理相同的数据,则结果可能会有所不同。这种不断变化的结果可能会使数据库处于不一致的状态。
为了解决这个问题,如果其事务是可串行化的或它们之间存在某种等价关系,我们允许并行执行事务调度。
等价调度
等价调度可以是以下类型:
结果等价
如果两个调度在执行后产生相同的结果,则称它们是结果等价的。它们可能对某些值产生相同的结果,而对另一组值产生不同的结果。这就是为什么这种等价通常不被认为很重要。
视图等价
如果两个调度中的事务以类似的方式执行类似的操作,则这两个调度将是视图等价的。
例如:
如果 T 在 S1 中读取初始数据,则它也在 S2 中读取初始数据。
如果 T 读取 J 在 S1 中写入的值,则它也读取 J 在 S2 中写入的值。
如果 T 在 S1 中对数据值执行最终写入,则它也在 S2 中对数据值执行最终写入。
冲突等价
如果两个调度具有以下属性,则它们将是冲突的:
- 两者都属于单独的事务。
- 两者都访问相同的数据项。
- 两者中至少一个是“写入”操作。
具有包含冲突操作的多个事务的两个调度被称为冲突等价,当且仅当:
- 两个调度都包含相同的交易集。
- 两个调度中都保持冲突操作对的顺序。
注意 - 视图等价调度是视图可串行化的,冲突等价调度是冲突可串行化的。所有冲突可串行化调度也是视图可串行化的。
事务状态
数据库中的事务可以处于以下状态之一:
活动 - 在此状态下,正在执行事务。这是每个事务的初始状态。
部分提交 - 当事务执行其最终操作时,据说它处于部分提交状态。
失败 - 如果数据库恢复系统进行的任何检查失败,则事务据说处于失败状态。失败的事务无法继续进行。
中止 - 如果任何检查失败并且事务已到达失败状态,则恢复管理器将撤消其在数据库上的所有写入操作,以使数据库恢复到事务执行之前的原始状态。处于此状态的事务称为中止的事务。数据库恢复模块可以在事务中止后选择以下两个操作之一:
- 重新启动事务
- 终止事务
已提交 - 如果事务成功执行所有操作,则称其已提交。其所有效果现在已永久建立在数据库系统中。