標籤:
語句:
XA {START|BEGIN} xid
XA END xid
XA PREPARE xid
XA COMMIT xid [ONE PHASE]
XA ROLLBACK xid
XA RECOVER
XA START xid | XA BEGIN xid
開始一個事務,並將事務置於ACTIVE狀態,此後執行的SQL語句都將置於該事務中。
XA END xid
將事務置於IDLE狀態,表示事務內SQL操作完成。
後續事務操作可以使XA PREPARE xid 或 XA COMMIT xid ONE PHASE.
XA PREPARE xid
實現事務提交的準備工作,事務狀態置於PREPARED狀態。
事務如果無法提交,該語句將會失敗。
此後可執行XC COMMIT和XA ROLLBACK
XA COMMIT xid
事務最終提交,完成持久化,事務完成。
XA COMMIT xid ONE PHASE
在XA END後執行,該語句一併包含XA PREPARE和XA COMMIT。
XA ROLLBACK xid
交易回復並終止。
樣本程式:
// 分別建立指向兩個資料庫的串連,並各自建立相應的表,DDL語句不能在事務過程中執行。 create_connection1(&_G_connect1); create_connection2(&_G_connect2); create_table_member(&_G_connect1); create_table_member(&_G_connect2); // 兩個資料庫分別建立兩個分散式交易 _G_connect1.direct_exec("xa begin ‘xa-trans‘"); _G_connect2.direct_exec("xa start ‘xa-trans‘"); // 向兩個庫表中分別寫入資料 insert_record_direct(&_G_connect1); insert_record_direct(&_G_connect2); // SQL操作完成 _G_connect1.direct_exec("xa end ‘xa-trans‘"); _G_connect2.direct_exec("xa end ‘xa-trans‘"); // 事務準備提交 _G_connect1.direct_exec("xa prepare ‘xa-trans‘"); _G_connect2.direct_exec("xa prepare ‘xa-trans‘"); // 事務最終提交 _G_connect1.direct_exec("xa commit ‘xa-trans‘"); _G_connect2.direct_exec("xa commit ‘xa-trans‘"); // 如某個資料庫準備提交失敗,則可以交易回復 //_G_connect1.direct_exec("xa rollback ‘xa-trans‘"); //_G_connect1.direct_exec("xa rollback ‘xa-trans‘"); // xa prepare和xa commit,可以使用xa commit one phase一條陳述式完成 _G_connect1.direct_exec("xa commit ‘xa-trans‘ one phase"); _G_connect2.direct_exec("xa commit ‘xa-trans‘ one phase");
MySQL分散式交易語句操作