若要在 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
是一個不帶正負號的整數。
gtrid
和 bqual
值由 MySQL 伺服器的底層 XA 支援常式以位元組方式解譯。然而,當剖析包含 XA 陳述式的 SQL 陳述式時,伺服器會使用一些特定的字元集。為了安全起見,請將 gtrid
和 bqual
寫成十六進位字串。
xid
值通常由交易管理員產生。由一個 TM 產生的值必須與由其他 TM 產生的值不同。給定的 TM 必須能夠在 XA RECOVER
陳述式傳回的值清單中辨識出自己的 xid
值。
XA START
使用給定的 xid
xid
值啟動 XA 交易。每個 XA 交易都必須有一個唯一的 xid
值,因此該值目前不能被另一個 XA 交易使用。唯一性是使用 gtrid
和 bqual
值來評估的。XA 交易的所有後續 XA 陳述式都必須使用與 XA START
陳述式中給定的 xid
值相同的 xid
值來指定。如果您使用任何這些陳述式,但指定的 xid
值與現有的 XA 交易不對應,就會發生錯誤。
XA START
、XA BEGIN
、XA END
、XA COMMIT
和 XA 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
是交易xid
的formatID
部分gtrid_length
是xid
的gtrid
部分的長度(以位元組為單位)bqual_length
是xid
的bqual
部分的長度(以位元組為單位)data
是xid
的gtrid
和bqual
部分的串連
XID 值可能包含非列印字元。XA RECOVER
允許使用選用的 CONVERT XID
子句,以便用戶端可以要求以十六進位格式顯示 XID 值。