MySQL事务和锁08

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

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

Mysql5.7参考手册  /  ...  /  XA交易状态
13.3.7.2xa交易状态

通过以下国家进行的一项航空航天器交易:

  1. 使用XA START 启动一个xd事务并将其放入 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 COMMIT ... ONE PHASE 准备并提交事务。… xid 价值不列于 XA RECOVER 因为交易终止。

  4. 作为一个PREPARED XA事务,您可以发布一个XA COMMIT 提交和终止交易的声明,或 XA ROLLBACK 回滚并终止事务。

下面是一个简单的xd事务,它将行插入到表中,作为全局事务的一部分:

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)

在给定客户端连接的上下文中,xa事务和本地(非xa)事务是相互排斥的。例如,如果XA START 已经发出了要开始一个DB2事务的本地事务,在已提交或回滚该事务之前,无法启动该本地事务。相反,如果本地交易已经开始 START TRANSACTION ,在事务被提交或回滚之前,不能使用xa语句。

如果一个x事务在ACTIVE 声明,您不能发布导致隐式提交的任何语句。这将会违反xd合同,因为您无法回滚xd事务。如果您试图执行这样的语句,会出现以下错误:

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

你可能感兴趣的:(mysql,数据库)