首页 > 数据库 >mysql跨库事务XA

mysql跨库事务XA

时间:2023-11-15 10:44:58浏览次数:48  
标签:xid 跨库 XA dbtest1 dbtest2 return mysql query

XA的性能很低,但是没得选的时候,也是个方案

<?PHP
$dbtest1 = new mysqli("127.0.0.1","public","public","dbtest1")or die("dbtest1 连接失败");
$dbtest2   = new mysqli("127.0.0.1public","public","dbtest2")or die("dbtest2 连接失败");
//为XA事务指定一个id,xid 必须是一个唯一值。
$xid = uniqid("");
//两个库指定同一个事务id,表明这两个库的操作处于同一事务中
$dbtest1->query("XA START '$xid'");//准备事务1
$dbtest2->query("XA START '$xid'");//准备事务2
try {
  //$dbtest1
  $return = $dbtest1->query("UPDATE member SET name='张三' WHERE id=1") ;
  if($return == false) {
    throw new Exception("库[email protected]执行update member操作失败!");
  }
  //$dbtest2
  $return = $dbtest2->query("UPDATE memberpoints SET point=point+10 WHERE memberid=1") ;
  if($return == false) {
    throw new Exception("库[email protected]执行update memberpoints操作失败!");
  }
  //阶段1:$dbtest1提交准备就绪
  $dbtest1->query("XA END '$xid'");
  $dbtest1->query("XA PREPARE '$xid'");
  //阶段1:$dbtest2提交准备就绪
  $dbtest2->query("XA END '$xid'");
  $dbtest2->query("XA PREPARE '$xid'");
  //阶段2:提交两个库
  $dbtest1->query("XA COMMIT '$xid'");
  $dbtest2->query("XA COMMIT '$xid'");
}
catch (Exception $e) {
  //阶段2:回滚
  $dbtest1->query("XA ROLLBACK '$xid'");
  $dbtest2->query("XA ROLLBACK '$xid'");
  die($e->getMessage());
}
$dbtest1->close();
$dbtest2->close();
?>

标签:xid,跨库,XA,dbtest1,dbtest2,return,mysql,query
From: https://www.cnblogs.com/qcy-blog/p/17833323.html

相关文章

  • 实现批量插入和更新(mysql)
    在实际数据库应用中,经常需要实现插入或更新(插入新数据,如果已存在则更新已有数据)的功能。然而,在处理大量数据时,频繁的数据库I/O操作可能导致性能问题。MySQL批量插入和更新使用INSERT...ONDUPLICATEKEYUPDATEMySQL提供了INSERT...ONDUPLICATEKEYUPDATE语法,通......
  • JDBC之Mysql
    一、JDBC是什么?JavaDataBaseConnectivity(Java语言连接数据库)二、JDBC的本质是什么?JDBC是SUN公司制定的一套接口(interface)。接口都有调用者和实现者。面向接口调用、面向接口写实现类,这都属于面向接口编程。三、为什么要面向接口编程?解耦合:降低程序的耦合度,提高程......
  • MySQL 导出表结构(含列名、数据类型、字段备注注释)导出成Excel
    SELECTCOLUMN_NAME列名,COLUMN_COMMENT名称,column_key主键,--COLUMN_TYPE数据类型,DATA_TYPE字段类型,CHARACTER_MAXIMUM_LENGTH长度,IS_NULLABLE是否必填,--COLUMN_DEFAULT描述FROMINFORMATION_SCHEMA.COLUMNSwhere--developer......
  • Mysql中如何解决You can't specify target table '表名' for update in FROM clause报
    Mysql中如何解决Youcan'tspecifytargettable'表名'forupdateinFROMclause报错为什么会出现这个错误呢?这是因为在MySQL使用时,在同一条SQL语句中,不允许先SELECT出同一个表的某些值,再对该表进行UPDATE操作。解决方式#WriteyourMySQLquerystatementbelowdeletef......
  • MYSQL 事务的底层原理
    事务的底层原理在事务的实现机制上,MySQL采用的是WAL:Write-aheadlogging,预写式日志,机制来实现的。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含redo和undo两部分信息。为什么需要使用WAL,然后包含redo和undo信息呢?举个例子,如果一......
  • Windows下如何快速移动MySQL/MariaDB数据库文件
    近期遇到一个要迁移数据库的问题,用户说不希望数据库文件存在于C盘。查了一下资料,这里做个总结。这个方法适用于MySQL和MariaDB。 步骤如下:1、停止数据库服务2、将数据库移动到需要迁移的路径3、修改安装路径data目录下的my.ini文件4、将 datadir=xxx改成需要迁移的路径5......
  • mysql5.7安装插件udp(lib_mysqludf_sys)
    项目应用中需要用mysql执行一下命令行.几经搜索可以安装lib_mysqludf_sys插件可以实现本地window环境安装(mysql8.0,64位,使用lib_mysqludf_sys.dll文件)--查看环境中插件目录showvariableslike'%plugin%';--plugin_dir C:/mysql/lib/plugin/--将lib_mysqludf_sys......
  • mysql创建表
    1.项目数据库管理方案:①.手写SQL②.PowerDesigner、Mysqlworkbench=>设计工具③.navicat建表2.元数据/元信息表:①.点击量、收藏数设计:a.固定的值放到主表.b.一个字段表示多个不固定的元素值.②表设计:a.元素名称(meta_name):可能......
  • MySQL基本数据类型简记
    1、在MySQL整型数值范围TypeStorage(Bytes)MinimumValueSignedMinimumValueUnsignedMaximumValueSignedMaximumValueUnsignedTINYINT1-1280127255SMALLINT2-3276803276765535MEDIUMINT3-83886080838860716777215INT4-2147483648021474836......
  • MySQL - 一条SQL查询语句是如何执行的
    MySQL的逻辑架构图 详细解答https://www.processon.com/mindmap/655307fe6a2ff722ead8d9e4 ......