踏雪寻梅 发表于 2018-10-10 13:36:44

MYSQL 分布式事务

$mysqlObj1 = new mysqli("10.15.51.78","root","","test")or die("$mysqlObj1 : 连接失败");  
$mysqlObj2 = new mysqli("10.15.51.202","root","","test")or die("$mysqlObj2 : 连接失败");
  

  
$grid = uniqid("");
  
$mysqlObj1->query("XA START '$grid'");//准备事务1$mysqlObj2->query("XA START '$grid'");//准备事务2try {
  $return = $mysqlObj2->query("UPDATE question SET author='高海峰' WHERE id=10") ;//第一个分支事务准备做的事情,通常他们会记录进日志
  if($return == false) {throw new Exception("202数据库更新失败!");
  }
  $return = $mysqlObj1->query("UPDATE question SET author='高海峰22' WHERE id=11");//第二个分支事务准备做的事情,通常他们会记录进日志
  if($return == false) {throw new Exception("78数据库更新失败!");
  }
  $mysqlObj2->query("XA END '$grid'");
  $mysqlObj2->query("XA PREPARE '$grid'");
  $mysqlObj1->query("XA END '$grid'");
  $mysqlObj1->query("XA PREPARE '$grid'");//通知是否准备提交
  $mysqlObj1->query("XA COMMIT '$grid'");//这两个基本同时执行
  $mysqlObj2->query("XA COMMIT '$grid'");
  
} catch (Exception $e) {
  $mysqlObj1->query("XA ROLLBACK '$grid'");
  $mysqlObj2->query("XA ROLLBACK '$grid'");print $e->getMessage();
  
}


页: [1]
查看完整版本: MYSQL 分布式事务