首页 > 代码库 > MySQL分布式事务语句操作
MySQL分布式事务语句操作
语句:
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分布式事务语句操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。