#### 13.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 开始`](xa-statements.html)， 这`加入`和`恢复`条款被承认但没有效果。

为了[`XA结束`](xa-statements.html)这`暂停 [迁移]`子句被识别但没有效果。

每个 XA 语句都以`XA`关键字，其中大多数需要一个*`xid`*价值。一个*`xid`*是 XA 事务标识符。它指示该语句适用于哪个事务。*`xid`*值由客户端提供，或由 MySQL 服务器生成。一个*`xid`*value 包含一到三个部分：

```
xid: gtrid [, bqual [, formatID ]]
```

*`网格`*是一个全局事务标识符，*`bqual`*是一个分支限定符，并且*`格式ID`*是一个数字，用于标识所使用的格式*`网格`*和*`bqual`*价值观。如语法所示，*`bqual`*和*`格式ID`*是可选的。默认*`bqual`*值为`''`如果没有给出。默认*`格式ID`*如果没有给出，值为 1。

*`网格`*和*`bqual`*必须是字符串文字，每个最多 64 个字节（不是字符）。*`网格`*和*`bqual`*可以通过多种方式指定。您可以使用带引号的字符串 (`'ab'`), 十六进制字符串 (`X'6162'`,`0x6162`) 或位值 (`b'*`呸呸呸`*'`）。

*`格式ID`*是一个无符号整数。

这*`网格`*和*`bqual`*MySQL 服务器的底层 XA 支持例程以字节为单位解释值。但是，在解析包含 XA 语句的 SQL 语句时，服务器会使用一些特定的字符集。为了安全起见，写*`网格`*和*`bqual`*作为十六进制字符串。

*`xid`*值通常由事务管理器生成。一个 TM 生成的值必须不同于其他 TM 生成的值。给定的 TM 必须能够识别它自己的*`xid`*由返回的值列表中的值[`XA 恢复`](xa-statements.html)陈述。

[`XA 开始 *`xid`*`](xa-statements.html)使用给定的启动 XA 事务*`xid`*价值。每个 XA 事务必须有一个唯一的*`xid`*值，因此该值当前不能被另一个 XA 事务使用。唯一性评估使用*`网格`*和*`bqual`*价值观。XA 事务的所有以下 XA 语句必须使用相同的*`xid`*值，如在[`XA 开始`](xa-statements.html)陈述。如果您使用这些语句中的任何一个但指定一个*`xid`*值与某些现有 XA 事务不对应，则会发生错误。

一个或多个 XA 事务可以是同一个全局事务的一部分。给定全局事务中的所有 XA 事务必须使用相同的*`网格`*中的价值*`xid`*价值。为此原因，*`网格`*值必须是全局唯一的，这样给定 XA 事务属于哪个全局事务就不会产生歧义。这*`bqual`*的一部分*`xid`*全局事务中每个 XA 事务的值必须不同。（要求*`bqual`*值不同是当前 MySQL XA 实现的一个限制。它不是 XA 规范的一部分。）

这[`XA 恢复`](xa-statements.html)语句返回 MySQL 服务器上位于`准备好的`状态。（看[第 13.3.8.2 节，“XA 事务状态”](xa-states.html).) 输出包括服务器上每个此类 XA 事务的一行，无论哪个客户端启动它。

[`XA 恢复`](xa-statements.html)需要[`XA_RECOVER_ADMIN`](privileges-provided.html#priv_xa-recover-admin)特权。此权限要求可防止用户发现除他们自己之外的未完成的已准备 XA 事务的 XID 值。它不会影响 XA 事务的正常提交或回滚，因为启动它的用户知道它的 XID。

[`XA 恢复`](xa-statements.html)输出行看起来像这样（例如*`xid`*由部分组成的值`'abc'`,`'定义'`， 和`7`):

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

输出列的含义如下：

-   `格式ID`是个*`格式ID`*交易的一部分*`xid`*

-   `gtrid_length`是以字节为单位的长度*`网格`*的一部分*`xid`*

-   `bqual_length`是以字节为单位的长度*`bqual`*的一部分*`xid`*

-   `数据`是的串联*`网格`*和*`bqual`*的部分*`xid`*

    XID 值可能包含不可打印的字符。[`XA 恢复`](xa-statements.html)允许一个可选的`转换 XID`子句，以便客户端可以请求十六进制的 XID 值。
