多数据库事务: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事务可以嵌套多少事务,为啥,回答对的还可以加分