Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  XA Transaction SQL Statements

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 take no effect。

对于XA ENDSUSPEND [FOR MIGRATE] take no effect。

每个 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 服务器的 underlying XA 支持子程序将 gtridbqual 值解释为字节。然而,在 SQL 语句包含 XA 语句时,服务器将在某个特定的字符集下工作。为了安全起见,请将 gtridbqual 写作十六进制字符串。

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

XA START xid从给定的xid值开始一个XA事务。每个XA事务都必须有唯一的xid值,因此该值不能当前正在被另一个XA事务使用。唯一性是通过gtridbqual值来评估。所有后续的XA语句都必须使用与XA START语句中给定的xid值相同。如果你使用任何这些语句,但指定的xid值不对应于某个现有XA事务,会出现错误。

XA STARTXA BEGINXA ENDXA COMMITXA ROLLBACK语句不受默认数据库的过滤,当服务器运行时使用--replicate-do-db--replicate-ignore-db选项。

一个或多个XA事务可以是同一个全局事务的一部分。所有XA事务都必须使用相同的gtrid值在xid值中。因此,gtrid值必须全球唯一,以避免对给定的XA事务的歧义。bqual部分的xid值必须在全局事务中的每个XA事务中不同。 (当前MySQL XA实现的限制是bqual值必须不同。这不是XA规范的一部分。)

XA RECOVER语句返回MySQL服务器上的XA事务的信息,这些事务当前处于PREPARED状态。 (见第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 部分的concatenation

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