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


MySQL 8.4 參考手冊  /  ...  /  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 8.4 支援分離的 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 節,「導致隱含提交的語句」