BEGIN — 開始一個交易區塊
BEGIN [ WORK | TRANSACTION ] [transaction_mode
[, ...] ] wheretransaction_mode
is one of: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE
BEGIN
啟動一個交易區塊,也就是說,在 BEGIN
指令之後的所有陳述式,都會在單一交易中執行,直到明確給定 COMMIT
或 ROLLBACK
。預設情況下(沒有 BEGIN
),PostgreSQL 會在「自動提交」模式下執行交易,也就是說,每個陳述式都會在它自己的交易中執行,並且會在陳述式結束時隱式地執行提交 (如果執行成功,否則會執行回滾)。
在交易區塊中執行陳述式會更快,因為交易開始/提交需要大量的 CPU 和磁碟活動。在交易中執行多個陳述式,在進行多個相關變更時,對於確保一致性也很有用:其他會話將無法看到並非所有相關更新都已完成的中間狀態。
如果指定了隔離級別、讀取/寫入模式或可延遲模式,則新的交易將具有這些特性,就像執行了 SET TRANSACTION
一樣。
START TRANSACTION
具有與 BEGIN
相同的功能。
當已經在交易區塊內時發出 BEGIN
將會觸發警告訊息。 交易的狀態不會受到影響。 要在交易區塊內巢狀交易,請使用儲存點 (參閱 SAVEPOINT)。
由於向後相容性的原因,可以省略連續 transaction_modes
之間的逗號。
開始一個交易區塊
BEGIN;
BEGIN
是一個 PostgreSQL 語言擴充。 它等同於 SQL 標準指令 START TRANSACTION
,其參考頁面包含其他相容性資訊。
DEFERRABLE
transaction_mode
是一個 PostgreSQL 語言擴充。
順帶一提,BEGIN
關鍵字在嵌入式 SQL 中用於不同的目的。 建議您在移植資料庫應用程式時,謹慎處理交易語意。
如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表格回報文件問題。