MySQL的SQL语句 -事务性语句和锁定语句- XA 事务状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的SQL语句 -事务性语句和锁定语句- XA 事务状态相关的知识,希望对你有一定的参考价值。

XA 事务状态

XA 事务进程包含以下状态:

  1. 使用 XA START 启动 XA 事务并将其置于 ACTIVE 状态。

  2. 对于 ACTIVE XA 事务,执行组成事务的 SQL 语句,然后执行 XA END 语句。XA END 将事务置于 IDLE 状态。

  3. 对于 IDLE XA 事务,可以执行 XA PREPARE 语句或 XA COMMIT ... ONE PHASE 语句:

■ XA PREPARE 将事务置于 PREPARED 状态。在此节点的 XA RECOVER 语句在其输出中包含事务的 xid 值,因为 XA RECOVER 列出了处于 PREPARED 状态的所有 XA 事务。

■ XA COMMIT ... ONE PHASE 准备并提交事务。由于事务终止,XA RECOVER 不会列出 xid 值。

  1. 对于 PREPARED XA 事务,可以执行 XA COMMIT 语句来提交和终止事务,或者执行 XA ROLLBACK 来回滚和终止事务。

下面是一个简单的 XA 事务,它向表中插入一行,是全局事务的一部分:

1.mysql> XA START ‘xatest‘;
2.Query OK, 0 rows affected (0.00 sec)
3.
4. mysql> INSERT INTO mytable (i) VALUES(10);
5. Query OK, 1 row affected (0.04 sec)
6. 
7. mysql> XA END ‘xatest‘;
8. Query OK, 0 rows affected (0.00 sec)
9. 
10. mysql> XA PREPARE ‘xatest‘;
11. Query OK, 0 rows affected (0.00 sec)
12. 
13. mysql> XA COMMIT ‘xatest‘;
14. Query OK, 0 rows affected (0.00 sec)

在给定客户端连接的上下文中,XA 事务和本地(非XA)事务是互斥的。例如,如果执行 XA START 开始 XA 事务,则在 XA 事务被提交或回滚之前,本地事务无法启动。相反,如果本地事务已经用 START TRANSACTION 语句启动,那么在事务被提交或回滚之前,不能使用 XA 语句。

如果 XA 事务处于 ACTIVE 状态,则不能执行任何导致隐式提交的语句。这将违反 XA 契约,因为无法回滚这个 XA 事务。尝试执行这样的语句会引发以下错误:

1.ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed
2.when global transaction is in the ACTIVE state

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

以上是关于MySQL的SQL语句 -事务性语句和锁定语句- XA 事务状态的主要内容,如果未能解决你的问题,请参考以下文章

如何用mysql打开sql文件

mysql导入sql文件

如何把mysql备份的*.sql文件导入数据库

mysql 的sql文件太大怎么导入

mysql怎么导入大型sql文件

SQL-mysql锁等待与死锁