DBMS 中的 ACID 属性

2025年4月28日 | 阅读 8 分钟
ACID Properties in DBMS

引言

DBMS 是数据的管理,它在数据发生任何更改时都应保持完整。这是因为如果数据的完整性受到影响,所有数据都会受到干扰和损坏。因此,为了维护数据的完整性,数据库管理系统中有四种属性,称为 ACID 属性。ACID 属性用于经历不同任务组的事务,我们在其中会看到 ACID 属性的作用。

在本节中,我们将学习并理解 ACID 属性。我们将学习这些属性代表什么以及每个属性的用途。我们还将通过一些例子来理解 ACID 属性。

DBMS 中的事务是什么意思?

A 事务 可以定义为计算系统与用户之间的完整交互,该交互导致系统中产生有用的输入和/或输出。事务一词最常用于在线系统的上下文,即用户通过计算机终端与系统交互并立即获得输入响应。不同的用户可以同时与系统进行相同或不同的事务。

为了解释事务的概念,请考虑在线银行系统,您可以在其中获取账户余额信息、支付电话费、获取新方案信息等。假设您想通过在线账单支付功能向 JIO 公司支付 1000 卢比的账单。首先切换到该公司网站的适当链接。假设您想支付 1000 卢比的账单。因此,您将指示银行从您的账户中扣除 1000 卢比,并使用各种操作将相同的金额存入 JIO 公司。此事务包含以下操作。

  • 使用 UPDATE 操作从客户银行账户中减去 1000 卢比的账单金额。
  • 作为客户的交换,再次使用 UPDATE 操作将 1000 卢比的账单金额添加到 JIO 公司。

对于客户而言,整个过程似乎是单一操作,即支付电话费,但从 DBMS 的角度来看,它包含如上所示的两个操作。因此,在任何失败的情况下,要么必须同时执行所有操作,要么根本不执行任何操作。客户账户被扣款但 JIO 公司账户未入账是不可接受的,因为不完整操作会导致客户资金丢失,并且电话可能会被断开。因此,支付电话费所涉及的所有操作都必须成功执行。在每个事务开始时,数据库都处于给定的一致状态,即满足所有完整性约束的状态。事务成功完成后,数据库将从一个一致状态更改为另一个一致状态。不完整的事务可能导致数据库状态不一致,因此在这种情况下,DBMS 会将数据库回滚到以前的一致状态。

ACID 属性

ACID 一词的展开定义为

ACID Properties in DBMS

1) 原子性

数据保持原子性的能力由“原子性”一词定义。它表明对数据执行的任何操作都必须完全执行,否则不执行。它还意味着过程不应该有任何中断或不完整执行。在执行事务操作时,动作需要完整执行,而不是部分执行。

示例:如果 Remo 的 A 账户中有 30 美元,他想从该账户向 Sheero 的 B 账户转账 10 美元。B 账户中已有 100 美元。当 10 美元转入 B 账户时,总金额将变为 110 美元。现在,将执行两个操作。一种是 Remo 希望转账的 10 美元将从他的 A 账户中扣除,相同的金额将存入 B 账户,即 Sheero 的账户。现在,会发生什么——第一个借记操作成功执行,但贷记操作失败。因此,在 Remo 的 A 账户中,金额变为 20 美元,而在 Sheero 的账户中,金额仍为 100 美元,正如之前存在的。 100 美元。

ACID Properties in DBMS

在上图中,可以看到在贷记 10 美元后,B 账户中的金额仍为 100 美元。因此,这不是一个原子事务。

下图显示借记和贷记操作均成功完成。因此,事务是原子的。

ACID Properties in DBMS

因此,当金额失去原子性时,在银行系统中,这会成为一个巨大的问题,因此原子性是银行系统的主要关注点。

2) 一致性

一致性的定义是应始终保持一个值。数据库中的任何修改都应始终保留,因为这确保了 DBMS 中数据的完整性。数据完整性对于事务至关重要,以确保事务之前和之后的数据库一致性。

示例

ACID Properties in DBMS

在上图中,有三个账户 A、B 和 C,其中 A 正在将事务 T 一次又一次地转给 B 和 C。有两种操作,即借记和贷记。账户 A 首先向账户 B 借记 50 美元,交易前 B 读取的账户 A 中的金额为 300 美元。成功交易 T 后,B 中的可用金额变为 150 美元。现在,A 向账户 C 借记 20 美元,此时 C 读取的值为 250 美元(因为成功向 B 借记了 50 美元,这是正确的)。从账户 A 到 C 的借记和贷记操作已成功完成。我们可以看到交易已成功完成,并且值也已正确读取。因此,数据是一致的。如果 B 和 C 读取的值为 300 美元,则表示数据不一致,因为当借记操作执行时,它不会一致。

3) 隔离性

“隔离性”表示一个阶段的分离。DBMS 定义的数据库隔离性是指任何数据都不应影响任何其他数据库,并且可以同时发生。简而言之,一个数据库操作应该在第一个数据库操作完成后开始。它表示不同数据库上的两个进程不能影响另一个进程的值。当两个或多个事务同时发生时,应保持事务之间的一致性。在修改提交到内存之前,同一事务中的其他事务无法观察到它。

示例:如果两个操作同时在两个不同的账户上运行,那么两个账户的值都不应该受到影响。值应该保持持久。正如您在下图中所见,账户 A 向账户 B 和 C 发起了 T1 和 T2 交易,但两者都独立执行,互不影响。这称为隔离。

ACID Properties in DBMS

4) 持久性

事物的持久性保证了其永久性。“持久性”一词在数据库管理系统 (DBMS) 中指的是在成功事务后数据已永久存储在数据库中的保证。数据必须完全持久,即使在发生崩溃或系统故障的情况下也能保持数据库的完整性。然而,恢复管理器负责确保在不幸的情况下数据库保持持久性。为了提交数据,每次进行修改时都必须使用 COMMIT 命令。

ACID 事务示例

现在假设 T1 是一个将 750 卢比从账户 A 转到账户 B 的事务。该事务定义如下

T1
读取 (A)
A := A - 750
写入 (A)
读取 (B)
B:= B + 750
写入 (B)

在上面的事务 T1 中,执行了访问、现有数据、更新现有数据等一系列操作,从而更新了账户余额,例如将 750 卢比从账户 A 转到账户。

ACID Properties in DBMS

让我们直接来看银行示例,其中资金在账户之间转移。让我们一一来看这个例子的 ACID 特性

原子性:一笔交易要完成,就必须将资金从一个账户转移到另一个账户。如果一个账户的资金被取出但未存入另一个账户,数据将变得不一致。

一致性:我们来看看数据库约束,即账户余额不能低于 0 美元。交易期间对账户余额进行的任何更改都必须在交易完成后产生合法、非负的余额;否则,应取消。

隔离性:考虑同时从同一个银行账户发起的两笔资金转移请求。当转账请求按顺序同时处理时,结果应该是一样的。

持久性:一旦数据库确认资金已从一个银行账户转移到另一个银行账户,请考虑停电。尽管发生意外故障,数据库仍应拥有更新后的数据。

ACID 属性的优点

以下是 DBMS 中 ACID 属性的各种优点

数据可靠性:ACID 属性确保在实现任何事务后,数据保持一致和正确。

数据完整性:它通过保证数据库中需要的任何修改都不能被更改或丢失来维护数据完整性。

并发控制:它通过防止它们之间的干扰来帮助管理多个并发运行的事务。

备份与恢复:ACID 属性确保在发生任何故障或崩溃的情况下,系统都可以恢复。

选择题

1. __________ 是构成单一逻辑工作单元的活动组。

  1. 交易
  2. 网络
  3. 单位
  4. 视图
 

答案:a

解释:被分组以构成单一逻辑工作单元的操作称为事务。数据库系统必须保证事务能被正确完成。


2. “全部或无”的术语广泛用于描述以下之一

  1. 原子性
  2. 选项 a, c
  3. 隔离
  4. 耐用性
 

答案:a

解释:原子性是通常用来描述全部或无策略的术语。它保证没有中间步骤,任务要么完成,要么不完成。


3. 以下哪项描述了事务的属性?

  1. 原子性
  2. 隔离
  3. 时间
  4. 耐用性
 

答案:d

解释:事务的三个特性是原子性、持久性和隔离性。


4. 当单独进行翻译时,会维护数据库的 _______。

  1. 一致性
  2. 原子性
  3. 隔离
  4. 选项 a, b
 

答案:b

解释:当单独进行翻译时,会维护数据库的一致性。它保证没有其他事务同时进行。


5. 下列表格中哪个机制负责确保持久性?

  1. 原子系统
  2. 编译器系统
  3. 并发控制系统
  4. 恢复系统
 

答案:d

解释:恢复机制负责保证持久性。此外,它还保证了原子性。


下一个主题DBMS 中的 ER 图