要在 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
值。Anxid
是 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
and
bqual
写成十六进制字符串。
xid
值通常由事务管理器生成。一个 TM 生成的值必须不同于其他 TM 生成的值。给定的 TM 必须能够在语句
xid
返回的值列表中
识别自己的值。XA
RECOVER
XA START
xid
xid
使用给定值启动 XA 事务。每个 XA 事务都必须有一个唯一的
xid
值,因此该值当前不能被另一个 XA 事务使用。gtrid
使用和
bqual
值评估唯一性。XA 事务的所有后续 XA 语句必须使用与语句xid
中给定的值
相同的值来指定XA
START
。如果您使用这些语句中的任何一个,但指定的xid
值与某些现有 XA 事务不对应,则会发生错误。
一个或多个 XA 事务可以是同一全局事务的一部分。给定全局事务中的所有 XA 事务必须在gtrid
值中使用相同的xid
值。出于这个原因,gtrid
值必须是全局唯一的,这样就不会出现给定 XA 事务属于哪个全局事务的歧义。对于全局事务中的每个 XA 事务,值的
bqual
一部分
xid
必须不同。(bqual
值不同的要求是当前 MySQL XA 实现的限制。它不是 XA 规范的一部分。)
该XA
RECOVER
语句返回 MySQL 服务器上处于该
PREPARED
状态的那些 XA 事务的信息。(请参阅
第 13.3.7.2 节,“XA 事务状态”。)输出包括服务器上每个此类 XA 事务的一行,无论哪个客户端启动它。
XA
RECOVER
输出行如下所示(对于
xid
由部分
'abc'
、'def'
和
组成的示例值7
):
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+
输出列具有以下含义:
formatID
是formatID
交易的一部分xid
gtrid_length
是gtrid
部分的 字节长度xid
bqual_length
是bqual
部分的 字节长度xid
data
是的gtrid
和bqual
部分的 串联xid
XID 值可能包含不可打印的字符。从 MySQL 5.7.5 开始,XA
RECOVER
允许一个可选的CONVERT
XID
子句,以便客户端可以请求十六进制的 XID 值。