在关系数据库中,事务是指一组操作的集合,这些操作要么全部成功执行,要么全部不执行。事务的引入是为了确保数据库在处理多个操作时的一致性和完整性。
在实际应用中,事务广泛应用于银行转账、订单处理等场景中。
例如,在一个银行转账的场景中,用户从账户A转账到账户B,这个操作实际上包括两个步骤:
-
从账户A中扣除金额。
-
向账户B中增加金额。
如果在执行过程中发生错误,比如系统崩溃或网络故障,可能导致账户A的金额被扣除,但账户B的金额没有增加。
为了避免这种不一致的情况,数据库使用事务来确保这两个操作要么同时成功,要么同时失败。
事务具有四个基本特性,通常称为ACID特性。接下来,我们将详细介绍这些特性,并通过具体的示例进行说明。
1. 原子性 (Atomicity)
原子性保证事务中的所有操作要么全部完成,要么全部不执行。即使在事务执行过程中发生错误,数据库也会回滚到事务开始之前的状态。
示例
假设我们有一个简单的银行账户表 accounts
:
-- 创建 accounts 表
CREATE TABLE accounts (
account_id INT PRIMARY KEY,
balance DECIMAL(10, 2) NOT NULL
);
-- 插入示例数据
INSERT INTO accounts (account_id, balance) VALUES (1, 1000.00), (2, 500.00);
<