13.4.7.2.XA事務狀態
13.4.7.2. 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用于預備和提交事務。xid值將不會被XA RECOVER列出,因為事務終止。
4. 對于一個PREPARED XA事務,您可以發布一個XA COMMIT語句來提交和終止事務,或者發布XA ROLLBACK來回滾并終止事務。
下面是一個簡單的XA事務,該事務把一行作為一個全局事務的一部分插入一個表中。
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來開始一項XA事務,則本地事務不會被啟動,直到XA事務已經被提交或被 回滾為止。相反的,如果已經使用START TRANSACTION啟動一個本地事務,則XA語句不能被使用,直到該事務被提交或被 回滾為止。