📅  最后修改于: 2021-01-07 05:27:50             🧑  作者: Mango
本章讨论事务处理的各个方面。我们还将研究事务中包含的低级任务,事务状态和事务属性。在最后一部分中,我们将研究日程表和日程表的可序列化性。
事务是包含数据库操作集合的程序,作为数据处理的逻辑单元执行。在事务中执行的操作包括一个或多个数据库操作,例如插入,删除,更新或检索数据。这是一个原子过程,它要么完全执行完毕,要么根本不执行。仅涉及数据检索而不进行任何数据更新的事务称为只读事务。
每个高级操作可以分为多个低级任务或操作。例如,数据更新操作可以分为三个任务-
read_item() -从存储器读取数据项到主存储器。
Modify_item() -更改主存储器中项目的值。
write_item() -将修改后的值从主存储器写入存储器。
数据库访问仅限于read_item()和write_item()操作。同样,对于所有事务,读写构成基本的数据库操作。
在事务中执行的低级操作是-
begin_transaction-指定事务开始执行的标记。
read_item或write_item-作为事务的一部分,可以与主内存操作交错的数据库操作。
end_transaction-指定交易结束的标记。
commit-表示事务已完全成功完成且不会被撤消的信号。
rollback-指明事务未成功完成的信号,因此数据库中的所有临时更改都将被撤消。提交的事务无法回滚。
事务可能会经历五个状态的子集,即活动,部分提交,提交,失败和中止。
活动-交易进入的初始状态是活动状态。事务在执行读取,写入或其他操作时保持在此状态。
部分提交-执行完事务的最后一条语句后,事务进入此状态。
提交-事务成功完成且系统检查已发出提交信号后,事务进入此状态。
失败-当发现正常执行无法继续进行或系统检查失败时,事务将从部分提交状态或活动状态变为失败状态。
中止-这是失败后回滚事务并且数据库已还原到事务开始之前的状态后的状态。
以下状态转换图描述了事务中的状态以及导致状态更改的低级事务操作。
任何交易都必须维护ACID属性,即。原子性,一致性,隔离性和耐用性。
原子性-此属性表示事务是处理的原子单位,即,它是完整执行的还是完全不执行。不应存在部分更新。
一致性-事务应将数据库从一种一致状态转移到另一种一致状态。它不应对数据库中的任何数据项产生不利影响。
隔离-事务应像系统中唯一的事务一样执行。同时运行的其他并发事务不应有任何干扰。
持久性-如果已提交的事务带来了更改,则该更改应在数据库中是持久的,并且在发生任何故障时不会丢失。
在具有多个同时事务的系统中,计划表是操作执行的总顺序。给定一个包含n个事务的进度表S,例如T1,T2,T3……….Tn;对于任何事务Ti,Ti中的操作必须按照计划S中的规定执行。
时间表有两种类型-
串行时间表-在串行时间表中,在任何时间点,只有一个事务处于活动状态,即没有事务重叠。如下图所示-
并行计划-在并行计划中,一个以上的事务同时处于活动状态,即,事务中包含的操作在时间上重叠。如下图所示-
在包含多个事务的计划中,当两个活动事务执行不兼容的操作时发生冲突。当以下三个条件全部同时存在时,两个操作被称为冲突-
这两个操作是不同事务的一部分。
两种操作都访问相同的数据项。
该操作中的至少一个是write_item()操作,即它试图修改数据项。
“ n”个事务的可序列化调度是并行调度,它等效于包含相同“ n”个事务的串行调度。可序列化的日程表包含串行日程表的正确性,同时确定并行日程表的CPU使用率更高。
两个时间表的等效性可以是以下类型-
结果等效-产生相同结果的两个进度表被称为结果等效。
视图等效-将以相似方式执行相似操作的两个计划称为视图等效。
冲突当量-如果两个计划包含相同的事务集并且具有相同的冲突操作对顺序,则它们被称为冲突当量。