文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  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 值有 1 到 3 部分

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 事务都不对应,则会发生错误。

XA STARTXA BEGINXA ENDXA COMMITXA ROLLBACK 语句不会被默认数据库过滤,前提是服务器在运行时使用 --replicate-do-db--replicate-ignore-db

一个或多个 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 输出行看起来像这样(对于一个包含部分 'abc''def'7 的示例 xid 值)

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 值。