文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  XA 交易 SQL 語法

15.3.8.1 XA 交易 SQL 語法

若要在 MySQL 中執行 XA 交易,請使用下列語法

XA {START|BEGIN} xid [JOIN|RESUME]

XA END xid [SUSPEND [FOR MIGRATE]]

XA PREPARE xid

XA COMMIT xid [ONE PHASE]

XA ROLLBACK xid

XA RECOVER [CONVERT XID]

對於 XA STARTJOINRESUME 子句會被辨識,但沒有作用。

對於 XA ENDSUSPEND [FOR MIGRATE] 子句會被辨識,但沒有作用。

每個 XA 陳述式都以 XA 關鍵字開頭,而且大多數都需要一個 xid 值。xid 是一個 XA 交易識別碼。它會指出陳述式所套用的交易。xid 值由用戶端提供,或由 MySQL 伺服器產生。xid 值有一到三個部分

xid: gtrid [, bqual [, formatID ]]

gtrid 是全域交易識別碼,bqual 是分支限定詞,而 formatID 則是用來識別 gtridbqual 值所使用格式的數字。如語法所示,bqualformatID 是選用的。如果未指定,則預設的 bqual 值為 ''。如果未指定,則預設的 formatID 值為 1。

gtridbqual 必須是字串文字,每個字串長度最多 64 個位元組(而非字元)。gtridbqual 可以透過幾種方式指定。您可以使用加引號的字串 ('ab')、十六進位字串 (X'6162'0x6162) 或位元值 (b'nnnn')。

formatID 是一個不帶正負號的整數。

gtridbqual 值由 MySQL 伺服器的底層 XA 支援常式以位元組方式解譯。然而,當剖析包含 XA 陳述式的 SQL 陳述式時,伺服器會使用一些特定的字元集。為了安全起見,請將 gtridbqual 寫成十六進位字串。

xid 值通常由交易管理員產生。由一個 TM 產生的值必須與由其他 TM 產生的值不同。給定的 TM 必須能夠在 XA RECOVER 陳述式傳回的值清單中辨識出自己的 xid 值。

XA START xid 使用給定的 xid 值啟動 XA 交易。每個 XA 交易都必須有一個唯一的 xid 值,因此該值目前不能被另一個 XA 交易使用。唯一性是使用 gtridbqual 值來評估的。XA 交易的所有後續 XA 陳述式都必須使用與 XA START 陳述式中給定的 xid 值相同的 xid 值來指定。如果您使用任何這些陳述式,但指定的 xid 值與現有的 XA 交易不對應,就會發生錯誤。

XA STARTXA BEGINXA ENDXA COMMITXA ROLLBACK 陳述式在伺服器以 --replicate-do-db--replicate-ignore-db 執行時,不會由預設資料庫篩選。

一個或多個 XA 交易可以屬於同一個全域交易。給定全域交易中的所有 XA 交易都必須在 xid 值中使用相同的 gtrid 值。因此,gtrid 值必須是全域唯一的,以便對於給定的 XA 交易屬於哪個全域交易沒有歧義。xid 值的 bqual 部分在全域交易中的每個 XA 交易都必須不同。(bqual 值必須不同的要求是目前 MySQL XA 實作的限制。它不是 XA 規格的一部分。)

XA RECOVER 陳述式會傳回 MySQL 伺服器上處於 PREPARED 狀態的 XA 交易的相關資訊。(請參閱 第 15.3.8.2 節,〈XA 交易狀態〉。)輸出內容包含伺服器上每個此類 XA 交易的資料列,無論哪個用戶端啟動了它。

XA RECOVER 需要 XA_RECOVER_ADMIN 權限。此權限要求可防止使用者發現其自身以外的未完成預備 XA 交易的 XID 值。它不會影響 XA 交易的正常提交或回滾,因為啟動它的使用者知道它的 XID。

XA RECOVER 輸出資料列看起來像這樣(對於由 'abc''def'7 部分組成的範例 xid 值)

mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        7 |            3 |            3 | abcdef |
+----------+--------------+--------------+--------+

輸出資料行的意義如下

  • formatID 是交易 xidformatID 部分

  • gtrid_lengthxidgtrid 部分的長度(以位元組為單位)

  • bqual_lengthxidbqual 部分的長度(以位元組為單位)

  • dataxidgtridbqual 部分的串連

XID 值可能包含非列印字元。XA RECOVER 允許使用選用的 CONVERT XID 子句,以便用戶端可以要求以十六進位格式顯示 XID 值。