文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  XA 交易狀態

15.3.8.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)

MySQL 9.0 支援分離的 XA 交易,可透過 xa_detach_on_prepare 系統變數啟用(預設為 ON)。分離的交易會在執行 XA PREPARE 後與目前的工作階段中斷連線(並且可以由另一個連線提交或回滾)。這表示目前的工作階段可以自由開始新的本機交易或 XA 交易,而無需等待已準備好的 XA 交易提交或回滾。

當 XA 交易分離時,連線不會知道它已準備好的任何 XA 交易的任何特殊資訊。如果目前的工作階段嘗試提交或回滾給定的 XA 交易(即使是它自己準備的),在另一個連線已執行後,該嘗試將因無效的 XID 錯誤 (ER_XAER_NOTA) 而遭到拒絕,因為要求的 xid 不再存在。

注意

分離的 XA 交易無法使用暫存表。

當分離的 XA 交易停用時(xa_detach_on_prepare 設定為 OFF),XA 交易會保持連線,直到由起始連線提交或回滾。不建議在群組複寫中使用的 MySQL 伺服器執行個體停用分離的 XA 交易;如需更多資訊,請參閱伺服器執行個體組態

如果 XA 交易處於 ACTIVE 狀態,您不能發出任何會導致隱含提交的陳述式。這會違反 XA 合約,因為您無法回滾 XA 交易。嘗試執行此類陳述式會引發以下錯誤

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

適用於上述備註的陳述式列於第 15.3.3 節, 「導致隱含提交的陳述式」