基本概念:
1. 事务的四个特性(ACID):
- 原子性(Atomicity): 事务是一个原子操作,要么全部执行成功,要么全部回滚到事务开始前的状态。
- 一致性(Consistency): 事务开始前和结束后,数据库的完整性约束没有被破坏。
- 隔离性(Isolation): 事务的执行是相互隔离的,一个事务的执行不应影响其他事务。
- 持久性(Durability): 一旦事务被提交,它对数据库的修改应该是永久性的。
2. 事务的开始和结束:
- BEGIN;:开始一个事务。
- COMMIT;:提交一个事务,使对数据库的更改永久化。
- ROLLBACK;:回滚一个事务,撤销未提交的更改。
示例:
-- 开始事务
BEGIN;
-- 执行一些 SQL 操作
UPDATE accounts SET balance = balance - 100 WHERE account_id = 123;
INSERT INTO transactions (account_id, amount, transaction_type) VALUES (123, 100, 'withdrawal');
-- 提交事务
COMMIT;
在这个例子中,事务开始后,执行了更新账户余额和插入交易记录的操作,然后通过 COMMIT 语句将这些操作永久化。如果在事务执行的过程中发生了错误,可以使用 ROLLBACK 语句将事务回滚到开始前的状态,撤销所有未提交的更改。
事务的隔离级别:
PostgreSQL 支持多个事务隔离级别,用于控制事务之间的相互影响。常见的隔离级别包括:
- READ COMMITTED:每个查询只能看到已经提交的事务所做的更改。
- REPEATABLE READ:在事务开始时看到的数据将在事务结束时保持不变。
- SERIALIZABLE:事务之间的相互影响最小,但可能会导致性能降低。
隔离级别可以在事务内使用 SET TRANSACTION ISOLATION LEVEL 来设置。
-- 设置事务隔离级别为 SERIALIZABLE
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
需要注意,隔离级别越高,对数据库的锁定和资源消耗也就越大,因此需要权衡隔离级别和性能之间的关系。
事务的使用非常重要,特别是在需要确保数据一致性和完整性的应用程序中。当一组操作必须一起执行时,将它们放在同一个事务中是很有意义的。
转载请注明出处:http://www.zyzy.cn/article/detail/14150/PostgreSQL