BEGIN - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

BEGIN

開始交易。相當於 START TRANSACTION。

交易是單一邏輯工作單位,無論是由一個命令或多個命令所組成。一般而言,交易中的所有命令會在資料庫的快照上執行,其開始時間是由 transaction_snapshot_begin 系統組態參數的值組所決定。

根據預設,個別 Amazon Redshift 操作 (查詢、DDL 陳述式、負載) 會自動遞交至資料庫。如果您想要暫停遞交某項操作,直到後續工作完成為止,則需使用 BEGIN 陳述式開啟交易,然後執行所需的命令,再使用 COMMIT結束 陳述式關閉交易。若有需要,您可以使用 ROLLBACK 陳述式停止進行中的交易。此行為的例外狀況是 TRUNCATE 命令,它會遞交本身執行所在的交易,而且無法轉返。

語法

BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ] START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ] Where option is SERIALIZABLE | READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster by querying the stv_db_isolation_level table.

參數

WORK

選用的關鍵字。

TRANSACTION

選用的關鍵字;WORK 和 TRANSACTION 為同義詞。

ISOLATION LEVEL SERIALIZABLE

可序列化隔離是預設支援的操作,因此無論陳述式中是否包含此語法,交易的行為都一樣。如需詳細資訊,請參閱 管理並行寫入操作。不支援任何其他隔離層級。

注意

SQL 標準定義了四種交易隔離層級來防止已變更讀取 (交易讀取的資料是由未遞交的同時交易所撰寫)、不可重複讀取 (交易重複讀取先前讀取的資料,且發現該資料已在初次讀取後,經過其他遞交的交易變更),以及幽靈讀取 (交易再次執行查詢、傳回一組滿足搜尋條件的資料列,然後發現該組資料列已因為其他最近遞交的交易而變更):

  • 讀取未遞交資料:已變更讀取、不可重複讀取及幽靈讀取都有可能發生。

  • 讀取已遞交資料:不可重複讀取及幽靈讀取都有可能發生。

  • 可重複讀取:可能發生幽靈讀取。

  • 可序列化:防止已變更讀取、不可重複讀取及幽靈讀取。

雖然您可以使用四種交易隔離層級中的任一種,但是 Amazon Redshift 會以可序列化的方式處理所有隔離層級。

READ WRITE

為交易提供讀取和寫入許可。

READ ONLY

為交易提供唯讀許可。

範例

下列範例會啟動可序列化交易區塊:

begin;

下列範例會啟動具有可序列化隔離層級和讀取與寫入許可的交易區塊:

begin read write;