top
Loading...
13.4.7.1.XA事務SQL語法
13.4.7.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

對于XA STARTJOINRESUME子句不被支持。

對于XA ENDSUSPEND [FOR MIGRATE]子句不被支持。

每個XA語句以XA關鍵詞為開頭,多數語句要求一個xid值。 xid是一個XA事務標識符。它指示該語句適用于哪個事務。xid值由客戶端提供,或由MySQL服務器生成。xid值包含一到三個部分:

xid: gtrid [, bqual [, formatID ]]

gtrid是一個全局事務標識符,bqual是一個分支限定符,formatID是一個數字,用于標識由gtridbqual值使用的格式。根據語法的表示,bqualformatID是自選的。如果沒有給定,默認的bqual值是''。如果沒有給定,默認的fromatID值是1

gtridbqual必須為字符串文字,每個的長度最多為64字節(不是字符)。gtridbqual可以用多種方法指定。您可以使用帶引號的字符串('ab'),十六進制字符串(0x6162, X'ab'),或位值(b'nnnn')

formatID是一個無符號的整數。

通過MySQL服務器的帶下劃線的XA支持子程序,gtridbqual值被理解為以字節為單位。但是,在包含XA語句的SQL語句正在被分析的同時,服務器會去操作一些特定的字符集。為了安全,把gtridbqual作為十六進制字符串寫入。

通常,xid值由事務管理器生成。由一個TM生成的值必須與由其它TMs生成的值不同。一個給定的TM必須能識別自己的xid值。這些值位于由XA RECOVER語句返回的值清單中。

XA START xid用于啟動一個帶給定xid值的XA事務。每個XA事務必須有一個唯一的xid值,因此該值當前不能被其它的XA事務使用。使用gtridbqual值評估唯一性。所有下列的用于XA事務的XA語句必須使用與XA START語句中給定的相同的xid值進行指定。如果您使用這些語句,但是指定的xid值與部分原有的XA事務不對應的話,會發生錯誤。

一項或多項XA事務可以是同一個全局事務的一部分。在一個給定的全局事務中的所有XA事務必須在xid值中使用同樣的gtrid值。出于這個原因,gtrid值必須為全局唯一的,這樣,有關一個給定的XA事務是哪個全局事務的一部分的問題就不會含糊不清。對于一個全局事務中的每個XA事務,xid值中的bqual部分必須不一樣。(bqual值應不一樣,這個要求是當前執行MySQL XA的一個限制條件。這不是XA規約的一部分。)

對于在MySQL服務器上的處于PREPARED狀態的XA事務,XA RECOVER語句會返回信息。(見13.4.7.2節,“XA事務狀態”.。)輸出包括一個行,該行用于服務器上的每個這類XA事務,不論是哪個客戶端啟動了它。

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部分的長度,以字節為單位

·         dataxidgtrid部分和bqual部分的串聯

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗