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");
时间: 2024-07-31 13:49:51

MySQL分布式事务语句操作的相关文章

Mysql分布式事务

关于Mysql分布式事务介绍,可参考:http://blog.csdn.net/luckyjiuyi/article/details/46955337 分为两个阶段:准备和执行阶段.有两个角色:事务的管理者(TM)和事务执行者(RM,Mysql Server). XA START  事务启动标识,使事务处于ACTIVE状态 XA END   事务结束标识,使事务处于IDLE状态 当事务处于IDLE状态,可 XA PREPARE  通知准备标识,处于 PREPARED状态 对于PREPARED状态

php + mysql 分布式事务(转)

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicity).一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做.一致性(consistency).事务必须是使数据库从一个一致性状态变到另一个一致性状态.一致性与原子性是密切相关的. 隔离性(isolation).一个事务的执行不能被其他事务干扰.即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个

30.3. MySQL四种语句操作,SQL语法等简介

SQL语言的兴起与语法标准 20世纪70年代,IBM开发出SQL,用于DB21981年,IBM推出SQL/DS数据库业内标准微软和Sybase的T-SQL,Oracle的PL/SQLSQL作为关系型数据库所使用的标准语言,最初是基于IBM的实现在1986年被批准的. 1987年,"国际标准化组织(ISO)" 把ANSI(美国国家标准化组织)SQL作为国际标准.SQL:ANSI SQLSQL-1986, SQL-1989, SQL-1992, SQL-1999, SQL-2003,SQL

分布式事务:两段式提交(最终一致性)

[MySQL如何实现分布式事务?] http://www.linuxidc.com/Linux/2013-10/91925.htm Innodb存储引擎支持XA事务,通过XA事务可以支持分布式事务的实现.分布式事务指的是允许多个独立的事务资源(transac tional resources)参与一个全局的事务中.事务资源通常是关系型数据库系统,也可以是其它类型的资源. 全局事务要求在其中所有参与的事务要么全部提交,要么全部回滚,这对于事务原有的ACID要求又有了提高.另外,在使用分布式事务时候

分布式事务资料

分布式事务之TCC服务设计和实现注意事项 事务自动补偿方案 这个需求我不接之事务自动补偿 蚂蚁金服黑科技:SOFA DTX分布式事务,保障亿级资金操作一致性 分布式事务:蚂蚁金服核心金融场景下的演进 分布式系统的事务处理 分布式事务 ( DTS ) 你必须知道的事儿 https://www.cloud.alipay.com/products/DTX 为你解读 SOFA-DTX 分布式事务的设计演进路线 FMT模式 FMT 模式参与者 参与者接入模式 XA强一致性读写 XA事务的隔离级别算什么级别

搞懂分布式技术17,18:分布式事务总结

搞懂分布式技术17:浅析分布式事务 众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行.这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务.但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为"分布式事务".那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事

分布式事务框架-seata初识

摘自:https://www.cnblogs.com/iceggboom/p/12144570.html 分布式事务框架-seata初识 一.事务与分布式事务 事务,在数据库中指的是操作数据库的最小单位,往大了看,事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. 那为什么会有分布式事务呢?单机事务是通过将操作限制在一个会话内通过数据库本身的锁以及日志来实现ACID.因为引入了分布式架构,所以事务的参与者.支持事务的服务器.资源服务器以及事务管理器

常用的分布式事务解决方案

众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行.这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务.但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为"分布式事务".那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案.废话不多说,那就开始吧-

分布式事务操作之Spring+JTA

什么是分布式事务?在网上找了一段比较容易理解的"定义". 分布式事务是指事务的参与者.支持事务的服务器.资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算机资源上访问并且更新数据,将两个或多个网络计算机的数据进行的多次操作作为一个整体进行处理.如不同银行账户之间的转账. 对于在项目中接触到JTA,大部分的原因是因为在项目中需要操作多个数据库,同时,可以保证操作的原子性,保证对多个数据库的操作一致性. 在正式的项目中应该用springMVC(struts)+sp