13.3.7.2 XATransaction 状态

XA 事务通过以下状态进行:

这是一个简单的 XA 事务,它作为全局事务的一部分在 table 中插入一行:

mysql> XA START 'xatest';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO mytable (i) VALUES(10);
Query OK, 1 row affected (0.04 sec)

mysql> XA END 'xatest';
Query OK, 0 rows affected (0.00 sec)

mysql> XA PREPARE 'xatest';
Query OK, 0 rows affected (0.00 sec)

mysql> XA COMMIT 'xatest';
Query OK, 0 rows affected (0.00 sec)

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

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

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

前面的 Comments 适用的语句在第 13.3.3 节“导致隐式提交的声明”处列出。

首页