BEGIN

Name

BEGIN -- 開始一個交易

Synopsis

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

這裡的 transaction_mode 是下列之一:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY

描述

BEGIN 初始化一個交易, 也就是說所有 BEGIN 命令後的用戶語句都將在一個交易裡面執行直到給出一個明確的 COMMIT 或者 ROLLBACK。 預設時,(沒有 BEGIN),PostgreSQL"autocommit" 模式執行交易,也就是說,每個語句在其自身的交易中執行, 並且在語句結束的時候隱含地執行一個提交(如果執行成功,否則執行回滾)。

在交易裡執行的語句很明顯地快得多, 因為交易開始/提交(start/commit)需要大量的CPU和磁盤活動。 在一個 交易內部執行多條語句對於修改若干個相關的資料表的時候也是很有用的: 在所有相關的更新完成之前,其它會話看不到中間的狀態。

如果聲明了隔離級別或者讀/寫模式,那麼新交易將具有那些特徵。就像執行了 SET TRANSACTION 一樣。

參數

WORK
TRANSACTION

可選關鍵字。沒什麼作用。

參考 SET TRANSACTION 獲取這個語句的其它參數的含義。

注意

START TRANSACTION 有著和 BEGIN 一樣的功能。

使用 COMMIT 或者 ROLLBACK 結束一個交易。

在一個現有交易內部發出一個 BEGIN 將產生一個警告訊息。 交易的狀態將不會被影響。要想在一個交易裡嵌套交易,請使用保存點(savepoint) (參閱 SAVEPOINT)。

出於向下兼容考慮,在隨後的 transaction_modes 之間的逗號可以忽略。

例子

開始一個用戶交易:

BEGIN;

相容性

BEGINPostgreSQL 語言的擴展。 在 SQL92 中沒有明確的 BEGIN 的定義;交易初始化總是隱含的而且使用一個 COMMIT 或者 ROLLBACK 語句終止。

許多關係型資料庫為了方便提供一個自動提交(autocommit)特性。

順便說一句,BEGIN 關鍵字在嵌入 SQL 裡用於不同的目的。 我們建議您在移植資料庫應用時仔細檢查交易的語意。

又見

COMMIT, ROLLBACK, START TRANSACTION, SAVEPOINT