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 中用於不同的目的。建議在移植資料庫應用程式時注意事務語義。
如果您在文件中看到任何不正確、不符合您對特定功能的實際經驗或需要進一步澄清的內容,請使用 此表單 報告文件問題。