↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 6.5 / 6.4
历史版本PostgreSQL 6.5 已于 2004 年 6 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

BEGIN

BEGIN — 以链模式开始一个事务

大纲

  
BEGIN [ WORK | TRANSACTION ]
  

输入

无。

输出

BEGIN

这表示一个新的事务已经启动。

NOTICE: BeginTransactionBlock and not in default state

这表示已经有一个事务在进行中。 当前事务不受影响。

描述

默认情况下,Postgres 以 unchained mode(非链模式, 在其他数据库系统中也称为“autocommit”(自动提交))执行事务。 换句话说,每条用户语句都在它自己的事务中 执行,并且在语句结束时隐式地执行一次提交 (如果执行成功,否则执行一次回滚)。 BEGIN 以链模式开启一个用户事务, 即 BEGIN 命令之后的所有用户语句都将在 单个事务中执行,直到显式的 显式的 COMMIT、ROLLBACK 或执行中止。链模式中的语句执行得快得多, 因为事务的启动/提交需要可观的 CPU 和磁盘 活动。在一个事务中执行多条语句 对于在更改多个相关 表时确保一致性也是必需的。

PostgreSQL 中的默认事务隔离级别 是 READ COMMITTED,其中事务内的查询只看到 在查询执行之前提交的更改。因此,如果你需要更严格的事务 隔离,就必须使用 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, 紧跟在 BEGIN 之后。 在 SERIALIZABLE 模式中,查询只会看到在整个 事务开始之前(实际上,是在一个可串行化事务中第一条 DML 语句 执行之前)提交的更改。

如果事务被提交,Postgres 将确保要么所有更新都完成,要么一个都不 完成。事务具有标准的 ACID (原子性、一致性、隔离性、持久性)属性。

注意

关键字 TRANSACTION 只是 WORK 的一个修饰性替代。 两个关键字都不必指定。

关于在事务中锁定表的进一步 信息,请参阅 LOCK 语句 。

使用 COMMIT 或 ROLLBACK 终止一个事务。

用法

开始一个用户事务:

BEGIN WORK;
  

兼容性

BEGIN 是一种 Postgres 语言扩展。

SQL92

SQL92 中没有显式的 BEGIN WORK 命令; 事务的开启总是隐式的,它以 COMMIT 语句或 ROLLBACK 语句 终止。

注意

许多关系数据库系统出于便利提供自动提交 特性。

SQL92 还要求 SERIALIZABLE 是默认的 事务隔离级别。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。