要在 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 语句时,服务器会使用某些特定的字符集。为了安全起见,将gtridand
bqual写成十六进制字符串。
xid值通常由事务管理器生成。一个 TM 生成的值必须不同于其他 TM 生成的值。给定的 TM 必须能够在语句
xid返回的值列表中
识别自己的值。XA
RECOVER
XA START
xidxid使用给定值启动 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交易的一部分xidgtrid_length是gtrid部分的 字节长度xidbqual_length是bqual部分的 字节长度xiddata是的gtrid和bqual部分的 串联xid
XID 值可能包含不可打印的字符。从 MySQL 5.7.5 开始,XA
RECOVER允许一个可选的CONVERT
XID子句,以便客户端可以请求十六进制的 XID 值。