支援的版本:目前 (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;

相容性

BEGIN 是一個 PostgreSQL 語言擴充。 它等同於 SQL 標準指令 START TRANSACTION,其參考頁面包含其他相容性資訊。

DEFERRABLE transaction_mode 是一個 PostgreSQL 語言擴充。

順帶一提,BEGIN 關鍵字在嵌入式 SQL 中用於不同的目的。 建議您在移植資料庫應用程式時,謹慎處理交易語意。

提交更正

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