本章将讨论如何使用 BEGIN
、 COMMIT
和 ROLLBACK
语句处理 PostgreSQL 事务。
简介
数据库事务是由一个或多个操作组成的单个工作单元。PostgreSQL 事务是原子的(Atomic)、一致的(Consistent)、隔离的(Isolated)和持久的(Durable)。这些属性通常称为 ACID:
- 原子性保证事务以全有或全无的方式完成。
- 一致性确保写入数据库的数据更改必须有效并遵循预定义的规则。
- 隔离性决定了事务完整性如何对其他事务可见。
- 持久性确保已提交的事务将永久存储在数据库中。
DROP TABLE IF EXISTS accounts;
CREATE TABLE accounts (
id INT GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR(100) NOT NULL,
balance DEC(15,2) NOT NULL,
PRIMARY KEY(id)
);
开启事务
可以用以下语句开启事务:
提交事务
使用以下语句提交事务:
COMMIT TRANSACTION;
-- 或者
COMMIT WORK;
-- 或者
COMMIT;
举例:
-- 开启事务
BEGIN;
-- 从账号1扣除1000
UPDATE accounts
SET balance = balance - 1000
WHERE id = 1;
-- 增加1000到账号2
UPDATE accounts
SET balance = balance + 1000
WHERE id = 2;
-- 查询所有账号
SELECT id, name, balance
FROM accounts;
-- 提交事务
COMMIT;
回滚事务
使用以下语句回滚事务:
举例:
-- 开启事务
BEGIN;
-- 从账号1扣除1500
UPDATE accounts
SET balance = balance - 1500
WHERE id = 1;
-- 增加1500给账号3
UPDATE accounts
SET balance = balance + 1500
WHERE id = 3;
-- 回滚事务
ROLLBACK;