DBMS中的事务管理:什么是ACID属性?

什么是数据库事务?

数据库事务是DBMS中一个逻辑处理单元,包含一个或多个数据库访问操作。简而言之,数据库事务代表了任何企业的真实世界事件。

在开始和结束事务语句之间进行的所有数据库访问操作都被视为DBMS中的单个逻辑事务。在事务期间,数据库是不一致的。只有在数据库提交后,状态才会从一个一致状态改变到另一个一致状态。

Database Transaction
数据库事务

关于数据库事务的事实

  • 事务是一个程序单元,其执行可能会也可能不会更改数据库的内容。
  • DBMS中的事务概念作为一个整体执行。
  • 如果数据库操作不更新数据库,只检索数据,则此类事务称为只读事务。
  • 成功的事务可以将数据库从一个一致状态变为另一个一致状态。
  • DBMS事务必须是原子性、一致性、隔离性和持久性的。
  • 如果数据库在事务之前处于不一致状态,则在事务之后仍将处于不一致状态。

为什么你需要事务的并发性?

数据库是一个共享资源。它被许多用户和进程并发访问。例如,银行系统、铁路和航空预订系统、股票市场监控、超市库存和结账等。

不管理并发访问可能会导致以下问题:

  • 硬件故障和系统崩溃
  • 同一事务的并发执行、死锁或性能缓慢

事务的状态

DBMS中事务概念的各种状态列于下文。

状态 事务类型
活动状态 当执行过程开始时,事务进入活动状态。在此状态下可以执行读或写操作。
部分提交 事务在事务结束后进入部分提交状态。
已提交状态 当事务已成功完成执行并提交后,它就处于已提交状态。此外,它的所有更改都已永久记录到数据库中。
失败状态 当任何检查失败或事务在活动状态下被中止时,事务就被视为失败。
终止状态 当某些即将离开系统的事务无法重新启动时,事务的状态会达到终止状态。
State Transition Diagram
数据库事务的状态转换图

让我们研究一个状态转换图,它突出了事务如何在这些不同状态之间移动。

  1. 事务一旦开始执行,就进入活动状态。它可以发出读或写操作。
  2. 读写操作完成后,事务变为部分提交状态。
  3. 接下来,一些恢复协议需要确保系统故障不会导致无法永久记录事务中的更改。如果此检查成功,事务将提交并进入已提交状态。
  4. 如果检查失败,事务将进入失败状态。
  5. 如果在活动状态下中止了事务,它将进入失败状态。应回滚事务以撤销其写操作对数据库的影响。
  6. 终止状态是指事务离开系统。

什么是ACID属性?

ACID属性用于在事务处理期间维护数据库的完整性。DBMS中的ACID代表Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)。

  • 原子性:事务是单个操作单元。您要么完全执行它,要么完全不执行它。不可能有部分执行。
  • 一致性:事务执行后,应将数据库从一个一致状态迁移到另一个一致状态。
  • 隔离性:事务应与其它事务隔离执行(无锁)。在并发事务执行期间,不应将同时执行的事务的中间结果提供给彼此。(级别0、1、2、3)
  • 持久性:· 成功完成事务后,数据库中的更改应保持不变。即使在系统发生故障的情况下。

带示例的DBMS中的ACID属性

以下是DBMS中ACID属性的示例

Transaction 1: Begin X=X+50, Y = Y-50 END
Transaction 2: Begin X=1.1*X, Y=1.1*Y END

事务1将50美元从账户X转到账户Y。

事务2为每个账户增加了10%的利息。

如果两个事务同时提交,则不能保证事务1会在事务2之前执行,反之亦然。无论执行顺序如何,结果都应如同事务按顺序一个接一个地发生一样。

事务的类型

基于应用领域

  • 非分布式 vs. 分布式
  • 补偿事务
  • 事务时间
  • 在线 vs. 批量

基于操作

  • 两步
  • 受限
  • 操作模型

基于结构

  • 扁平或简单事务:它由在开始和结束操作之间执行的一系列基本操作组成。
  • 嵌套事务:包含其他事务的事务。
  • 工作流

什么是调度?

调度是创建一个由多个并行事务组成的单个组,并逐个执行它们的过程。它应该保留每个事务中指令出现的顺序。如果两个事务同时执行,一个事务的结果可能会影响另一个事务的输出。

示例

Initial Product Quantity is 10
Transaction 1: Update Product Quantity to 50
Transaction 2: Read Product Quantity

如果事务2在事务1之前执行,将会读取到过时的产品数量信息。因此,需要调度。

数据库中的并行执行是不可避免的。但是,当并行执行的事务之间存在等价关系时,则允许并行执行。这种等价关系有3种类型。

结果等价

如果两个调度在执行后显示相同的结果,则称为结果等价调度。它们可能对某些值提供相同的结果,而对另一组值提供不同的结果。例如,一个事务更新产品数量,而另一个事务更新客户详细信息。

视图等价

当两个调度中的事务执行类似操作时,就会发生视图等价。示例:一个事务在产品表中插入产品详细信息,而另一个事务在存档表中插入产品详细信息。事务是相同的,但表是不同的。

冲突等价

在这种情况下,两个事务更新/查看同一组数据。事务之间存在冲突,因为执行顺序会影响输出。

什么是可串行化?

可串行化是搜索一个并发调度,其输出等于一个串行调度,其中事务逐个执行。根据调度的类型,有两种类型的可串行化:

  • 冲突
  • 查看

摘要

  • 事务管理是DBMS中一个逻辑处理单元,包含一个或多个数据库访问操作。
  • 它是一个事务,是程序单元,其执行可能会也可能不会更改数据库的内容。
  • 不管理并发访问可能会导致硬件故障和系统崩溃等问题。
  • 活动、部分提交、已提交、失败和终止是重要的事务状态。
  • DBMS中ACID属性的完整形式是原子性、一致性、隔离性和持久性。
  • DBMS事务类型有三种:基于应用领域、操作和结构。
  • 调度是创建一个由多个并行事务组成的单个组,并逐个执行它们的过程。
  • 可串行化是搜索一个并发调度,其输出等于一个串行调度,其中事务逐个执行。