Coursera 笔记

Module 06 · Bonus Module: Advanced SQL for Data Engineers

ACID TransactionsACID 事务

Coursera ↗

欢迎观看本视频,了解 ACID 事务。

观看本视频后,您将能够:

  • 解释什么是 ACID 事务。
  • 举例说明 ACID 事务。
  • 描述提交 (Commits) 和回滚 (Rollbacks)。

事务的定义 (Definition of a Transaction)

事务是一个不可分割的工作单元。

  • 它可以包含一条或多条 SQL 语句。
  • 要被认为是成功的,要么所有 SQL 语句都必须成功完成,使数据库处于新的稳定状态;要么所有语句都不能完成,使数据库保持在事务开始之前的状态。

示例:银行卡购物

例如,当您使用银行卡进行购买时,必须发生多件事情:

  1. 产品必须被添加到您的购物车。
  2. 您的付款必须得到处理。
  3. 您的账户必须被扣除正确的金额,同时商店的账户必须被记入相应的金额。
  4. 该产品的库存必须减少购买的数量。

🔍 示例细化:Rose 购买靴子

如果 Rose 购买了一双价值 $200 的靴子,则需要执行以下操作:

  • 使用 UPDATE 语句减少 Rose 账户的余额。
  • 使用另一个 UPDATE 语句为鞋店账户增加 $200。
  • 使用最后一个 UPDATE 语句将鞋店靴子的库存水平减少 1。

如果这些 UPDATE 语句中的任何一个失败,整个事务都应该失败,以保持数据的一致性状态。


ACID 特性详解

上述示例中的事务类型被称为 ACID 事务。ACID 是四个关键特性的首字母缩写:

特性 英文 解释
原子性 Atomic 所有更改必须成功执行,否则一概不执行。
一致性 Consistent 数据在事务执行之前和之后必须处于一致状态。
隔离性 Isolated 在事务运行时,没有其他进程可以更改正在处理的数据。
持久性 Durable 事务所做的更改必须持久存在(即永久保存)。

事务的控制:开始、提交与回滚

1. 启动事务

  • 要启动一个 ACID 事务,请使用 BEGIN 命令。
  • 在 DB2 on Cloud 中,此命令是隐式的 (implicit)。
  • 此后您发出的任何命令都属于该事务的一部分,直到您发出 COMMIT 或 ROLLBACK 命令为止。

2. 提交 (COMMIT)

  • 如果所有命令都成功完成,请发出 COMMIT 命令,将所有更改保存到数据库,使其处于一致、稳定的状态。

3. 回滚 (ROLLBACK)

  • 如果任何命令失败(例如,Rose 的账户没有足够的钱支付),您可以发出 ROLLBACK 命令来撤销所有更改,使数据库恢复到先前的、一致的稳定状态。

应用程序中的 SQL 调用

  • SQL 语句可以从 Java、C、R 和 Python 等语言中调用。
  • 这需要使用特定于数据库的访问 API,例如 Java 的 JDBC (Java Database Connectivity),或针对 Python 的特定数据库连接器,如 ibm_db。
  • 大多数语言使用 EXEC SQL 命令来启动 SQL 命令,包括 COMMIT 和 ROLLBACK,如示例所示。

    记住,BEGIN 是隐式的,您无需显式调用它。

  • 将 SQL 命令纳入应用程序代码中,使您有机会创建错误检查例程,进而控制事务是提交还是回滚。

结论回顾

在本视频中,您了解到:

  • 事务代表一个完整的工作单元,可以是一条或多条 SQL 语句。
  • ACID 事务要求所有 SQL 语句必须成功完成或一概不执行,这确保了数据库始终处于一致状态。
  • ACID 代表原子性 (Atomic)、一致性 (Consistent)、隔离性 (Isolated)、持久性 (Durable)。
  • BEGIN、COMMIT 和 ROLLBACK 等 SQL 命令用于管理 ACID 事务。
  • SQL 命令可以从 C、R 和 Python 等语言中调用。