MVCC 与事务

返回 PostgreSQL

通用事务理论:数据库事务;MySQL 对照:MySQL 事务与锁


MVCC 并发控制

PostgreSQL 使用纯 MVCC(多版本并发控制),读操作不加锁,读不阻塞写,写不阻塞读。

每行数据有隐藏字段:

  • xmin:创建该版本的事务 ID
  • xmax:删除/更新该版本的事务 ID(0 表示未删除)

读操作只看对当前事务可见的版本,不同于 MySQL 的共享锁方式。

Vacuum:定期清理不可见的旧版本行,释放空间。PostgreSQL 有 autovacuum 自动运行。运维见 EXPLAIN 与运维


事务

BEGIN;
 
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
 
COMMIT;
-- 或 ROLLBACK;

保存点(Savepoint)

BEGIN;
INSERT INTO orders ...;
SAVEPOINT sp1;
 
INSERT INTO order_items ...;
-- 如果失败,只回滚到 sp1,不影响 orders 的插入
ROLLBACK TO SAVEPOINT sp1;
 
COMMIT;

相关