2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

BEGIN

BEGIN — 開始一個事務塊

概要

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

where transaction_mode is one of:

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

描述

BEGIN 啟動一個事務塊,也就是說,在 BEGIN 命令之後的所有語句都將在單個事務中執行,直到顯式發出 COMMITROLLBACK 為止。預設情況下(不帶 BEGIN),PostgreSQL 以“自動提交”模式執行事務,即每個語句都在自己的事務中執行,並在語句末尾隱式執行提交(如果執行成功,否則執行回滾)。

事務塊中的語句執行速度更快,因為事務開始/提交需要大量的 CPU 和磁碟活動。在事務中執行多個語句也有助於確保在進行多項相關更改時的一致性:其他會話將無法看到中間狀態,即尚未完成所有相關更新的狀態。

如果指定了隔離級別、讀/寫模式或可延遲模式,則新事務具有這些特性,如同執行了 SET TRANSACTION

引數

WORK
TRANSACTION

可選關鍵字。它們沒有效果。

有關此語句其他引數含義的資訊,請參閱 SET TRANSACTION

註釋

START TRANSACTION 具有與 BEGIN 相同的功能。

使用 COMMITROLLBACK 來終止事務塊。

當已在事務塊內時發出 BEGIN 會引起警告訊息。事務的狀態不受影響。要在一個事務塊內巢狀事務,請使用儲存點(參見 SAVEPOINT)。

出於向後相容的原因,連續 transaction_modes 之間的逗號可以省略。

示例

開始一個事務塊

BEGIN;

相容性

BEGINPostgreSQL 的語言擴充套件。它等同於 SQL 標準命令 START TRANSACTION,其參考頁面包含其他相容性資訊。

DEFERRABLE transaction_modePostgreSQL 的語言擴充套件。

順便說一下,BEGIN 關鍵字在嵌入式 SQL 中用於不同的目的。建議在移植資料庫應用程式時注意事務語義。

提交更正

如果您在文件中看到任何不正確、不符合您對特定功能的實際經驗或需要進一步澄清的內容,請使用 此表單 報告文件問題。