📅  最后修改于: 2021-01-11 06:21:41             🧑  作者: Mango
事务可以定义为一组任务。单个任务是无法进一步划分的最小处理单位。
让我们以一个简单的交易为例。假设银行职员将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)
事务是程序的一个很小的单元,它可能包含几个低级任务。在数据库系统中的事务必须保持tomicity,C onsistency,我溶胶化,和d urability -俗称ACID属性-以确保准确性,完整性和数据完整性。
原子性(Atomicity) -此属性指出必须将事务视为原子单位,即,其所有操作均已执行或不执行。数据库中必须没有任何状态可以使事务部分完成。应该在执行交易之前或在执行/堕胎/失败之后定义状态。
一致性-任何事务之后,数据库必须保持一致状态。任何事务都不应对驻留在数据库中的数据产生任何不利影响。如果数据库在执行事务之前处于一致状态,则在执行事务之后它也必须保持一致。
持久性-即使系统发生故障或重新启动,数据库也应足够持久以容纳其所有最新更新。如果事务更新数据库中的数据块并提交,则数据库将保存修改后的数据。如果提交事务,但是系统在将数据写入磁盘之前发生故障,则一旦系统恢复运行,该数据将被更新。
隔离-在同时并行执行多个事务的数据库系统中,隔离的属性表明所有事务都将被执行并执行,就好像它是系统中唯一的事务一样。任何交易都不会影响任何其他交易的存在。
当操作系统在多程序环境中执行多个事务时,一个事务的指令可能会与其他事务交互。
时间表-事务的时间顺序执行序列称为时间表。时间表中可以包含许多事务,每个事务包含许多指令/任务。
串行时间表-这是一个时间表,在该时间表中,事务以首先执行一个事务的方式排列。当第一个事务完成其周期时,将执行下一个事务。交易是一个接一个地订购的。这种类型的时间表称为串行时间表,因为事务是以串行方式执行的。
在多事务环境中,串行计划被视为基准。事务中指令的执行顺序不能更改,但是两个事务可以以随机方式执行其指令。如果两个事务相互独立并且在不同的数据段上工作,则此执行无害。但是如果这两个事务处理的是同一数据,则结果可能会有所不同。这种千变万化的结果可能会使数据库处于不一致状态。
为了解决这个问题,如果事务时间表是可序列化的或它们之间具有等价关系,则允许并行执行事务时间表。
等效时间表可以是以下类型-
如果两个调度在执行后产生相同的结果,则称它们等效。对于某些值,它们可能会产生相同的结果,而对于另一组值,它们可能会产生不同的结果。这就是为什么这种等效性通常不被认为很重要的原因。
如果两个时间表中的事务以相似的方式执行相似的动作,则两个时间表将是等效的。
例如-
如果T在S1中读取了初始数据,那么它也在S2中读取了初始数据。
如果T读取了J在S1中写入的值,那么它也读取了J在S2中写入的值。
如果T在S1中对数据值执行最终写入,那么它也在S2中对数据值执行最终写入。
如果两个日程表具有以下属性,则它们将冲突-
当且仅当以下情况下,具有多个具有冲突操作的多个事务的调度被称为冲突等效:
注–视图等效计划可视图序列化,而冲突等效计划可冲突序列化。所有冲突可序列化的时间表也可以视图可序列化。
数据库中的事务可以处于以下状态之一-
活动-在此状态下,正在执行事务。这是每笔交易的初始状态。
部分提交-当事务执行其最终操作时,据说它处于部分提交状态。
失败-如果数据库恢复系统进行的任何检查失败,则认为事务处于失败状态。失败的事务无法再继续进行。
已中止-如果任何检查失败且事务已达到失败状态,则恢复管理器将回滚对数据库的所有写操作,以使数据库恢复到执行事务之前的原始状态。这种状态下的事务称为中止。事务中止后,数据库恢复模块可以选择两个操作之一-
已提交-如果事务成功执行了所有操作,则表示已提交。现在,其所有影响已在数据库系统上永久建立。