全部產品
Search
文件中心

PolarDB:事務控制

更新時間:Mar 13, 2025

在某些情況下,可能需要成功地對資料庫執行所有更新,也可能需要在發生錯誤時根本不執行任何更新。一組資料庫更新將作為單個單元成功執行,或者根本不執行,這被稱為事務。

銀行業務的一個常見樣本是兩個賬戶之間的資金轉賬。事務的兩個部分是從一個賬戶取走資金和將資金存入另一個賬戶。此事務的兩個部分都必鬚髮生,否則銀行的賬簿將失去平衡。存款和取款是一個事務。

如果滿足以下條件,則可以建立使用與Oracle資料庫相容的事務控制樣式的SPL應用程式:

  • polar_comp_stmt_level_tx參數必須設定為TRUE。這會阻止在發生異常時執行無條件復原BEGIN/END塊內的所有資料庫更新的操作。

  • 應用程式不得在自動認可模式下運行。如果自動認可模式開啟,則會立即提交每個成功的資料庫更新,並且無法撤銷。開啟或關閉自動認可模式的方式取決於應用程式。

事務在SPL程式中遇到第一個SQL命令時開始。所有後續的SQL命令都包含在該事務中。當發生以下任一情況時,事務就會結束:

  • 發生未處理的異常,在這種情況下,事務期間執行的所有資料庫更新的效果都將復原,並且事務將中止。

  • 遇到COMMIT命令,在這種情況下,事務期間執行的所有資料庫更新的效果都將成為永久性的。

  • 遇到ROLLBACK命令,在這種情況下,事務期間執行的所有資料庫更新的效果都將復原,事務將中止。如果遇到一個新的 SQL 命令,便會開始新的事務。

  • 控制權返回調用應用程式(如Java、PSQL等),在這種情況下,應用程式的操作確定是提交還是復原事務;除非事務位於聲明了PRAGMA AUTONOMOUS_TRANSACTION的塊內,在這種情況下,事務的提交或復原獨立於調用程式執行。

說明

與Oracle不同的是,DDL命令(如CREATE TABLE)不隱式在其自己的事務中執行。因此,DDL命令不會像在Oracle中那樣自動導致立即資料庫提交,但DDL命令可像DML命令一樣復原。

事務可跨一個或多個BEGIN/END塊,單個BEGIN/END塊也可包含一個或多個事務。

以下各節將更詳細地講述COMMIT和ROLLBACK命令。