若要在 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,會辨識 JOIN 和 RESUME 子句,但沒有作用。
對於 XA END,會辨識 SUSPEND [FOR MIGRATE] 子句,但沒有作用。
每個 XA 陳述式都以 XA 關鍵字開頭,而且大部分都需要 xid 值。xid 是 XA 交易識別碼。它會指出陳述式適用的交易。 xid 值由用戶端提供,或由 MySQL 伺服器產生。 xid 值有一到三個部分
xid: gtrid [, bqual [, formatID ]]
gtrid 是一個全域交易識別碼,bqual 是一個分支限定符,而 formatID 是一個數字,用於識別 gtrid 和 bqual 值所使用的格式。如語法所示,bqual 和 formatID 是可選的。如果未給定,則預設的 bqual 值為 ''。如果未給定,則預設的 formatID 值為 1。
gtrid 和 bqual 必須是字串文字,每個長度最多 64 位元組(非字元)。gtrid 和 bqual 可以透過幾種方式指定。您可以使用帶引號的字串('ab')、十六進位字串(X'6162'、0x6162)或位元值(b')。nnnn'
formatID 是一個無號整數。
MySQL 伺服器的底層 XA 支援常式會以位元組方式解讀 gtrid 和 bqual 值。然而,在剖析包含 XA 陳述式的 SQL 陳述式時,伺服器會使用某些特定的字元集。為了安全起見,請將 gtrid 和 bqual 寫成十六進位字串。
xid 值通常由交易管理器產生。由一個 TM 產生的值必須與其他 TM 產生的值不同。給定的 TM 必須能夠在 XA RECOVER 陳述式傳回的值清單中識別出自己的 xid 值。
XA START 使用給定的 xidxid 值啟動 XA 交易。每個 XA 交易都必須具有唯一的 xid 值,因此該值目前不能被另一個 XA 交易使用。唯一性是使用 gtrid 和 bqual 值來評估的。XA 交易的所有後續 XA 陳述式都必須使用與 XA START 陳述式中給定的相同 xid 值來指定。如果您使用任何這些陳述式,但指定的 xid 值不對應於任何現有的 XA 交易,則會發生錯誤。
當伺服器使用 --replicate-do-db 或 --replicate-ignore-db 執行時,XA START、XA BEGIN、XA END、XA COMMIT 和 XA 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是交易xid的formatID部分gtrid_length是xid的gtrid部分的長度(以位元組為單位)bqual_length是xid的bqual部分的長度(以位元組為單位)data是xid的gtrid和bqual部分的串聯
XID 值可能包含不可列印的字元。XA RECOVER 允許使用選用的 CONVERT XID 子句,以便用戶端可以請求以十六進位表示的 XID 值。