选择 打开 改范围 完整检索页

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

文档 / SQL 命令 / 事务控制

SQL COMMAND · 事务控制

BEGIN

开始一个事务块

BEGIN事务控制引入 10(基线)现存至 20 devel0 次语法变更

动词
BEGIN
对象
引入版本
10(基线)
状态
现存
语法变更次数
0
手册小节数
6

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

BEGIN WORK TRANSACTION transaction_mode ,
transaction_mode
ISOLATION LEVEL SERIALIZABLE REPEATABLE READ READ COMMITTED READ UNCOMMITTED READ WRITE READ ONLY NOT DEFERRABLE

语法概要

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]

其中 transaction_mode 是下列之一:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
    [ NOT ] DEFERRABLE

PostgreSQL 18 手册 · 查看完整参考页

描述

BEGIN启动一个事务块,也就是说,在 BEGIN命令之后的所有语句都会在同一个事务中执行, 直到显式给出COMMITROLLBACK为止。 默认情况下(不使用BEGIN), PostgreSQL自动提交模式执行事务, 也就是说,每条语句都在自己的事务中执行,并在语句结束时隐式提交 (如果执行成功,否则回滚)。

在事务块中执行语句通常会更快,因为事务的启动和提交需要大量的 CPU 和磁盘活动。 在进行多个相关更改时,把多条语句放在一个事务中执行也有助于保证一致性: 其他会话将无法看到那些相关更新尚未全部完成时的中间状态。

如果指定了隔离级别、读写模式或可延迟模式, 新事务就会具有这些特征,就像执行了 SET TRANSACTION一样。

参数

WORK
TRANSACTION

可选关键字,没有任何作用。

关于本语句其他参数含义的信息,参见SET TRANSACTION

注解

START TRANSACTIONBEGIN具有相同功能。

使用COMMITROLLBACK 可以结束一个事务块。

如果在已经处于事务块中时发出BEGIN,将会产生一条警告消息。 事务状态不会受影响。 若要在事务块中实现事务嵌套,请使用保存点 (参见SAVEPOINT)。

出于向后兼容的考虑,连续多个transaction_modes 之间的逗号可以省略。

示例

开始一个事务块:

BEGIN;

兼容性

BEGINPostgreSQL的一种语言扩展。 它等价于 SQL 标准命令 START TRANSACTION, 后者的参考页中包含更多兼容性信息。

DEFERRABLE transaction_modePostgreSQL的一种语言扩展。

另外,在嵌入式 SQL 中,关键字BEGIN用于不同的目的。 在移植数据库应用程序时,应当谨慎处理事务语义。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 14← 13正文更新

    正文更新
  2. PostgreSQL 11← 10正文更新

    正文更新

同组命令

命令动词对象版本变动最近变更
TRANSACTIONS事务控制15 条
ABORTABORT 121 次
中止当前事务现存
BEGINBEGIN
开始一个事务块现存
COMMITCOMMIT 121 次
提交当前事务现存
ENDEND 121 次
提交当前事务现存
ROLLBACKROLLBACK 121 次
中止当前事务现存
SAVEPOINTSAVEPOINT
在当前事务中定义一个新的保存点现存
SET CONSTRAINTSSETCONSTRAINTS
为当前事务设置约束检查时机现存
WAIT FORWAITFOR
等待 WAL 达到目标 LSN现存
COMMIT PREPAREDCOMMITPREPARED
提交一个先前为两阶段提交而预备的事务现存
ROLLBACK PREPAREDROLLBACKPREPARED
回滚一个先前为两阶段提交而预备的事务现存
RELEASE SAVEPOINTRELEASESAVEPOINT
释放一个先前定义的保存点现存
ROLLBACK TO SAVEPOINTROLLBACKTO SAVEPOINT
回滚到一个保存点现存
PREPARE TRANSACTIONPREPARETRANSACTION
为两阶段提交准备当前事务现存
SET TRANSACTIONSETTRANSACTION
设置当前事务的特性现存
START TRANSACTIONSTARTTRANSACTION
开始一个事务块现存