文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  XA 事务 SQL 语句

15.3.8.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 [CONVERT XID]

对于 XA STARTJOINRESUME 子句会被识别,但不起作用。

对于 XA ENDSUSPEND [FOR MIGRATE] 子句会被识别,但不起作用。

每个 XA 语句都以 XA 关键字开头,并且大多数语句都需要一个 xid 值。 xid 是一个 XA 事务标识符。它指示语句应用于哪个事务。 xid 值由客户端提供,或由 MySQL 服务器生成。 xid 值包含一到三个部分

xid: gtrid [, bqual [, formatID ]]

gtrid 是全局事务标识符,bqual 是分支限定符,formatID 是一个数字,用于标识 gtridbqual 值使用的格式。如语法所示,bqualformatID 是可选的。如果没有给出,则默认的 bqual 值为 ''。如果没有给出,则默认的 formatID 值为 1。

gtridbqual 必须是字符串字量,每个字量最多 64 个字节(不是字符)。gtridbqual 可以通过多种方式指定。可以使用带引号的字符串('ab')、十六进制字符串(X'6162'0x6162)或位值(b'nnnn')。

formatID 是一个无符号整数。

MySQL 服务器底层的 XA 支持例程会将 gtridbqual 值解释为字节。但是,在解析包含 XA 语句的 SQL 语句时,服务器会使用一些特定的字符集。为了安全起见,请将 gtridbqual 写成十六进制字符串。

xid 值通常由事务管理器生成。一个 TM 生成的值必须与其他 TM 生成的值不同。给定的 TM 必须能够在 XA RECOVER 语句返回的值列表中识别出自己的 xid 值。

XA START xid 使用给定的 xid 值启动 XA 事务。每个 XA 事务必须具有唯一的 xid 值,因此该值当前不能被另一个 XA 事务使用。唯一性是使用 gtridbqual 值评估的。XA 事务的所有后续 XA 语句必须使用与 XA START 语句中给出的相同的 xid 值指定。如果使用任何这些语句,但指定的 xid 值与某个现有 XA 事务不对应,则会发生错误。

当服务器使用 --replicate-do-db--replicate-ignore-db 运行时,XA STARTXA BEGINXA ENDXA COMMITXA 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 是事务 xidformatID 部分

  • gtrid_lengthxidgtrid 部分的长度(以字节为单位)

  • bqual_lengthxidbqual 部分的长度(以字节为单位)

  • dataxidgtridbqual 部分的串联

XID 值可能包含不可打印字符。XA RECOVER 允许使用可选的 CONVERT XID 子句,以便客户端可以请求十六进制的 XID 值。