文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  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 START,會辨識 JOINRESUME 子句,但沒有作用。

對於 XA END,會辨識 SUSPEND [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 是一個無號整數。

MySQL 伺服器的底層 XA 支援常式會以位元組方式解讀 gtridbqual 值。然而,在剖析包含 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 值不對應於任何現有的 XA 交易,則會發生錯誤。

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

一個或多個 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 輸出列如下所示(例如,xid 值由 'abc''def'7 等部分組成)

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 值。