码迷,mamicode.com
首页 > 数据库 > 详细

MySQL的SQL语句 -事务性语句和锁定语句(7)- XA 事务 SQL 语句

时间:2020-12-09 11:43:16      阅读:9      评论:0      收藏:0      [点我收藏+]

标签:字符   start   部分   strong   prepare   识别   无符号   事务管理   回滚   

XA 事务 SQL 语句

要在 MySQL 中执行 XA 事务,请使用以下语句:

1. XA {START|BEGIN} xid [JOIN|RESUME]
2. 
3. XA END xid [SUSPEND [FOR MIGRATE]]
4. 
5. XA PREPARE xid
6. 
7. XA COMMIT xid [ONE PHASE]
8. 
9. XA ROLLBACK xid
10. 
11. XA RECOVER [CONVERT XID]

对于 XA START,可以识别 JOIN 和 RESUME 子句,但不起作用。

对于 XA END,可以识别 SUSPEND [For MIGRATE] 子句,但不起作用。

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

1.xid: gtrid [, bqual [, formatID ]]

gtrid 是一个全局事务标识符,bqual 是一个分支限定符,formatID 是一个数字,用于标识 gtrid 和 bqual 值所使用的格式。如语法所示,bqual 和 formatID 是可选的。如果未指定 bqual 值,默认值为 ‘‘。如果未给定,formatID 默认值为 1。

gtrid 和 bqual 必须是字符字面量,每个字符的长度都不超过64个字节(不是字符)。可以用多种方式指定 gtrid 和 bqual。可以使用带引号的字符串 (‘ab‘)、十六进制字符串 (X‘6162‘, 0x6162) 或位值 (b‘nnnn‘)。

formatID 是无符号整数。

MySQL 服务器的底层 XA 支持例程以字节表示 gtrid 和 bqual 值。然而,当一个包含 XA 语句的 SQL 语句被解析时,服务器使用一些特定的字符集。为了安全起见,请将 gtrid 和 bqual 写成十六进制字符串。

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

XA START xid 使用给定的 xid 值启动 XA 事务。每个 XA 事务必须有一个惟一的 xid 值,因此该值当前不能被另一个 XA 事务使用。使用 gtrid 和 bqual 值评估唯一性。必须使用与 XA START 语句中给定的值相同的 xid 值来指定 XA 事务的所有后续 XA 语句。如果使用这些语句,但指定的 xid 值与现有的 XA 事务不对应,则会发生错误。

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

XA RECOVER 语句返回 MySQL 服务器上处于 PREPARED 状态的 XA 事务的信息。服务器上每个这样的 XA 事务都会包含在输出行中,而不管是哪个客户端启动的。

XA RECOVER 需要 XA_RECOVER_ADMIN 权限。此权限要求阻止用户发现除自己的事务外未完成的已准备好的 XA 事务的 XID 值。它不影响 XA 事务的正常提交或回滚,因为启动它的用户知道它的 XID。

XA RECOVER 输出行如下所示(例如,xid 值由 ‘abc‘, ‘def‘ 和 7 组成):

1. mysql> XA RECOVER;
2. +----------+--------------+--------------+--------+
3. | formatID | gtrid_length | bqual_length | data   |
4. +----------+--------------+--------------+--------+
5. |        7 |            3 |            3 | abcdef |
6. +----------+--------------+--------------+--------+

输出列具有以下含义:

● formatID 是事务 xid 的 formatID 部分

● gtrid_length 是 xid 的 gtrid 部分的长度(以字节为单位)

● bqual_length 是 xid 的 bqual 部分的长度(以字节为单位)

● data 是 xid 的 gtrid 和 bqual 部分的组合

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

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/xa-statements.html

MySQL的SQL语句 -事务性语句和锁定语句(7)- XA 事务 SQL 语句

标签:字符   start   部分   strong   prepare   识别   无符号   事务管理   回滚   

原文地址:https://blog.51cto.com/15023289/2559526

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!