13.3.7.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 START,可以识别JOINRESUME子句,但无效。

对于XA END,可以识别SUSPEND [FOR MIGRATE]子句,但无效。

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

xid: gtrid [, bqual [, formatID ]]

XA START xid使用给定的* xid *值开始 XA 事务。每个 XA 事务必须具有唯一的_xid 值,因此该值当前不能被另一个 XA 事务使用。使用 gtrid bqual 值评估唯一性。必须使用与XA START语句中给定的相同值 xid *来指定用于 XA 事务的所有以下 XA 语句。如果使用这些语句中的任何一条,但是指定的xid *值与某些现有 XA 事务不对应,则将发生错误。

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

XA RECOVER语句返回 MySQL 服务器上处于PREPARED状态的 XA 事务的信息。 (请参阅第 13.3.7.2 节“ XA 事务状态”。)无论服务器是由哪个 Client 端启动的,输出都会为服务器上的每个此类 XA 事务包含一行。

XA RECOVER输出行看起来像这样(例如* xid *由'abc''def'7组成的值):

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

输出列具有以下含义:

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

首页