事务
事务是所有数据库系统的一个基本概念。一次事务的要点就是把多个步骤捆绑成一个单一的、不成功则成仁的操作。其它并发的事务是看不到在这些步骤之间的中间状态的,并且如果发生了一些问题,导致该事务无法完成,那么所有这些步骤都完全不会影响数据库。
比如,假设一个银行的数据库包含各种客户帐户的余额,以及每个分行的总余额。假设我们要记录一次从 Alice 的帐户到 Bob 的帐户的金额为 $100.00 的支付动作。那么,完成这个任务的简单到极点的 SQL 命令像下面这样
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
UPDATE branches SET balance = balance - 100.00
WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Alice');
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
UPDATE branches SET balance = balance + 100.00
WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Bob');这些命令的细节在这儿并不重要;重要的是这里牵涉到了好几个独立的更新来完成这个相当简单的操作。银行官员会希望要么所有这些更新全部生效,要么全部不起作用。我们当然不希望一次系统崩溃就导致 Bob 收到 100 块不是 Alice 支付的钱,也不希望 Alice 老是不花钱从 Bob 那里拿到物品。我们需要保证:如果在操作的过程中出了差错,那么所有这些步骤都不会发生效果。把这些更新组合成一个事务就给予我们这样的保证。事务被认为是原子的:从其它事务的角度来看,它要么是全部发生,要么完全不发生。
我们还需要保证:一旦一个事务完成并且得到数据库系统的认可,那么它必须被真正永久地存储,并且不会在随后的崩溃中消失。比如,如果我们记录到了一个 Bob 撤单的动作,那么我们不希望仅仅在他走出银行大门之后的一次崩溃就会导致对他的帐户的扣减动作消失。一个事务型数据库保证一个事务所做的所有更新在事务发出完成响应之前都记录到永久的存储中(也就是磁盘)。
事务型数据库的另外一个重要的性质和原子更新的概念关系密切:当多个事务并发地运行的时候,每个事务都不应看到其它事务所做的未完成的变化。比如,如果一个事务正忙着计算所有分行的余额总和,那么它不应该包括来自 Alice 的分行的扣帐和来自 Bob 分行的入帐,反之亦然。所以事务必须是黑白分明的,不仅仅体现在它们在数据库上产生的永久影响出发,而且体现在它们运转时的自身的可视性上。一个打开的事务做的更新在它完成之前是其它事务无法看到的,而到提交的时候所有更新同时可见。
在 PostgreSQL 里,一个事务是通过把 SQL 命令用 BEGIN 和 COMMIT 命令包围实现的。因此我们的银行事务实际上看起来像下面这样:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
-- 等等
COMMIT;如果在该事务的过程中,我们决定不做提交(可能是我们刚发现 Alice 的余额是负数),那么我们可以发出 ROLLBACK 而不是 COMMIT 命令,那么到目前为止我们的所有更新都会被取消。
PostgreSQL 实际上把每个 SQL 语句当做在一个事务中执行来看待。如果你没有发出 BEGIN 命令,那么每个独立的语句都被一个隐含的 BEGIN 和(如果成功的话) COMMIT 包围。一组包围在 BEGIN 和 COMMIT 之间的语句有时候被称做 事务块。
【注意】一些客户库自动发出 BEGIN 和 COMMIT ,因此你可能不需要特意请求就可以获得事务块的效果。查看你使用的接口的文档。
我们可以通过使用保存点的方法,在一个事务里更加精细地控制其中的语句。保存点允许你选择性地抛弃事务中的某些部分,而提交剩下的部分。在用 SAVEPOINT 定义了一个保存点后,如果需要,你可以使用 ROLLBACK TO 回滚到该保存点。则该事务在定义保存点到 ROLLBACK TO 之间的所有数据库更改都被抛弃,但是在保存点之前的修改将被保留。
在回滚到一个保存点之后,这个保存点仍然保存着其定义,所以你可以回滚到这个位置好几次。当然,如果你确信你不需要再次回滚到一个保存点,那么你可以释放它,这样系统可以释放一些资源。要记住:释放或者回滚到一个保存点都会自动释放在其后定义的所有保存点。
所有这些都发生在一个事务块内部,所以所有这些都不可能被其它事务会话看到。当且仅当你提交了这个事务块,这些提交了的动作才能以一个单元的方式被其它会话看到,而回滚的动作完全不会再被看到。
记得我们的银行数据库吗? 假设我们从 Alice 的帐户上消费 $100.00 ,然后给 Bob 的帐户进行加款,稍后我们发现我们应该给 Wally 的账号加款。那么我们可以像下面这样使用保存点:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
-- 呀!加错钱了,应该用 Wally 的账号
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Wally';
COMMIT;这个例子当然是实在太简单了,但是通过使用保存点,我们可以对事务块有大量的控制。并且,ROLLBACK TO 是除了事务全部回滚,重新来过之外,唯一可以用于重新控制一个因错误而被系统置于退出状态事务的方法。
分享到:
相关推荐
7. **数据库完整性**:实体完整性、参照完整性和用户定义的完整性,是保证数据准确性的规则。 8. **并发控制与事务处理**:在多用户环境下,如何协调同时进行的操作,避免数据不一致,事务的概念(ACID属性:原子性...
数据库系统概论重点定义整理 数据库系统概论是数据库系统的基础理论,涵盖了数据库的定义、数据库管理系统、数据库系统的特点、数据结构化、数据独立性、数据模型、实体关系模型、数据库系统的三级模式结构等关键...
为了保证数据的一致性,我们需要一种机制来协调这些数据库间的操作,这就是"用事物关联起来"的关键。 事务(Transaction)是数据库操作的基本单元,它确保一组操作要么全部成功,要么全部失败,避免出现部分完成的...
数据库管理员(DBA)的角色至关重要,他们参与数据库设计,定义存储结构和存取策略,设定安全性要求和完整性条件,负责系统运行的监控和维护,以及数据库的优化和重组。 在信息的世界中,现实世界的实体、特征、...
### 数据库规范化原则和范式定义 #### 一、引言 在数据库设计与管理领域,规范化是一项重要的技术,用于确保数据的结构合理且避免冗余。通过将数据组织成不同的表格并遵循一定的规则(即规范化原则),可以提高数据...
- SQL是结构化查询语言,用于操作关系数据库,包括数据定义、查询、更新和控制等功能。 - 它支持创建、修改和查询表,以及执行复杂的数据库操作。 9. 数据库安全性: - 数据库安全性涉及保护数据免受未经授权的...
数据库设计概念是指在设计数据库时,需要计划要存储有关哪些事物的信息,以及要保存有关各个事物的哪些信息。您还需要确定这些事物的相互关系。在数据库设计中的术语,在这一步创建的数据库原型就称作概念数据库模型...
* 定义数据库 * 定义模式 * 定义表 * 定义视图 视图是数据库系统中的一种重要概念,具有: * 简化用户操作 * 用户能以多种角度看待同一数据 * 对重构数据库提供了一定程度的逻辑独立性 * 对机密数据提供安全保护 *...
数据库管理系统(DBMS)的主要功能可以分为以下几点:数据定义功能允许用户定义数据库结构和数据类型;数据组织存储和管理功能负责数据的存储结构和存取方法;数据操纵功能提供了对数据进行查询、插入、删除和修改等...
定义:描述事物的符号记录 种类:文字、图形、图像、声音 特点:数据与其语义是不可分的 1.1.2. 数据库(Database) 定义:数据库是长期存储在计算机内、有组织的、可大量共享的达两数据集合 特征 数据按一定的数据...
数据是描述事物的符号记录,可以是数字、文字、图形、图像、声音等多种形式。数据与其所代表的语义紧密相关,例如,数字500可以表示不同的含义,取决于上下文。随着计算机技术的发展,数据类型变得越来越复杂,数据...
数据模型定义了数据的类型、结构、操作和约束,是数据库设计的基础。在实际应用中,设计者会根据业务需求选择合适的数据模型,然后转化为具体的DBMS支持的数据库模式。 总的来说,数据库原理基础涵盖了从数据管理的...
其主要功能包括定义数据结构、操作数据、管理数据库运行以及维护数据库。常见的DBMS产品有IBM的DB2、Oracle的Oracle、SAP的SAP HANA、微软的SQL Server等。 5. 文件系统与数据库系统的区别和联系:文件系统主要是...
- **定义**: 描述事物的符号记录被称为数据。这些数据可以是数字、文字、图形、图像、声音、正文等多种形式。 - **特性**: 数据与其语义密切相关,同一组数据可能根据不同的语境具有不同的含义。例如,“500”可以...
- **定义**: 数据是数据库中存储的基本对象,它是描述事物的符号记录。例如,数字、文字、图像等都可以是数据。 - **种类**: 包括但不限于文本、图形、图像、音频和视频等。 - **特点**: 数据与其所代表的意义(即...
- DBMS是管理数据库的软件,提供数据定义、建立、查询等功能,并确保数据完整性和安全性。 6. 数据库应用系统(DBS): - 数据传递、数据处理和管理信息系统是DBS的主要类型。 - 管理信息系统基于数据库技术,...
1. **数据与数据库**:数据是描述事物的符号记录,可表现为数字、文字、图像等多种形式,通过数字化存储在计算机中。数据库则是按照一定格式存储在计算机存储设备上的数据仓库,提供数据的存储和访问。 2. **数据库...
- **定义**:描述事物的符号记录被称为数据。它可以是数字、文字、图形、图像、声音、文本等多种形式。 - **特点**:数据与其含义密切相关。同样的数据在不同情境下可能代表不同的意义。 2. **数据库**: - **...