Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 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 子句被识别,但没有效果。

对于 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 是一个无符号整数。

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

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

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

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

一个或多个XA事务可以是同一个全局事务的一部分。同一个全局事务中的所有XA事务必须在 值中使用相同的 gtrid值。因此, gtrid值必须是全球唯一的,以便不会对给定XA事务所属的全局事务产生歧义。 bqual部分 值必须在同一个全局事务中的每个XA事务中不同。(当前MySQL XA实现中的 bqual值必须不同的要求不是XA规范的一部分。)

XA RECOVER语句返回MySQL服务器上处于 状态的XA事务的信息。(见 第15.3.8.2节,“XA事务状态”。)输出包括服务器上每个XA事务的一行,无论哪个客户端启动了它。

XA RECOVER需要XA_RECOVER_ADMIN权限。该权限要求防止用户发现其他人的未提交XA事务的XID值,而不影响正常的XA事务提交或回滚,因为启动它的用户知道其XID。

XA RECOVER输出行看起来像这样(对于一个示例 值,包括部分<'abc'>、<'def'>和<7>):

mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        7 |            3 |            3 | abcdef |
+----------+--------------+--------------+--------+

输出列的含义如下:

  • formatID是事务formatID部分

  • gtrid_lengthgtrid部分的字节长度

  • bqual_lengthbqual部分的字节长度

  • datagtridbqual部分的连接

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