多数据库事务:mysql、SQL server 和 PHP

Posted

技术标签:

【中文标题】多数据库事务:mysql、SQL server 和 PHP【英文标题】:multiple databases transactions: mysql, SQL server and PHP 【发布时间】:2014-07-03 09:27:44 【问题描述】:

我正在使用 YII / php 构建一个代码,它与 mysql 和 SQL Server 两个数据库对话。

有两个操作发生: 写入 MYSQL 和写入 SQL Server。有没有办法让它们成为原子的?

目前我正在做以下事情:

$tran1=...$db->beginTransaction();
.....db1...code

$tran2=$db2->beginTransaction();
........
$tran1->commit();
$tran2->commit();

想知道是否有办法让它们成为原子的?嵌套事务不起作用,因为它们是两个不同的服务器。

谢谢,

R

【问题讨论】:

【参考方案1】:

总是有风险,你犯了一个,另一个失败了,然后你就有麻烦了。

所以我能想到的唯一补充是首先确保可以先提交其中一个事务,然后先对另一个进行射击。 MySQL 没有检查事务状态的功能,但 SQL server 有:XACT_STATE()。这使您几乎可以确定 SQL 事务是可提交的,因此您可以先试用 MySQL 事务,如果失败,仍然是安全的。

我将如何“优化”您的伪代码:

$result = $sqlDb->query('SELECT XACT_STATE()');
if ($result == 1)

   $mysqlDb->commit();
   $sqlDb->commit();

else
   rollback both;

我还没有尝试过,所以我不做任何保证:)

【讨论】:

以上是关于多数据库事务:mysql、SQL server 和 PHP的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver事务可以嵌套多少事务,为啥,回答对的还可以加分

mysql,oracle,sql server中的默认事务隔离级别查看,更改

sql server中的事务是啥意思

SQL SERVER的锁机制——概述(锁与事务隔离级别)

sqlserver事务怎么开启 怎么提交 怎么回滚

sql server 和 mysql 之间的链接服务器上的分布式事务