BEGIN

Name

BEGIN -- 開始一個事務塊

Synopsis

  
BEGIN [ WORK | TRANSACTION ]

描述

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

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

參數

WORK
TRANSACTION

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

注意

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

使用 COMMIT 或者 ROLLBACK 結束一個事務。

在一個現有事務塊內部發出一個 BEGIN 將產生一個警告信息。 事務的狀態將不會被影響。

例子

開始一個用戶事務:

BEGIN;

兼容性

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

許多關系型數據庫為了方便提供一個自動提交(autocommit)特性。

順便說一句,BEGIN 關鍵字在嵌入 SQL 裡用于不同的目的。 我們建議你在移植數據庫應用時仔細檢查事務的語意。

又見

COMMIT, ROLLBACK