如果我使用两个数据库,我必须开始交易吗?这是正确的,还是这个代码是错误的?如果我在第二个查询中犯了错误,那么调用rollback(),但不幸的是不会回滚第一个查询...
$conn_site=mysql_connect("localhost", "us", "ps");
mysql_select_db("site",$conn_site);
$conn_forum=mysql_connect("localhost", "us", "ps");
mysql_select_db("forum",$conn_forum);
function begin() {
@mysql_query("BEGIN",$conn_site);
@mysql_query("BEGIN",$conn_forum);
}
function commit_reg() {
@mysql_query("COMMIT",$conn_site);
@mysql_query("COMMIT",$conn_forum);
}
function rollback(){
@mysql_query("ROLLBACK",$conn_site);
@mysql_query("ROLLBACK",$conn_forum);
}
begin();
mysql_query("insert into users (....) or rollback();
mysql_query("insert into forumusers (....) or rollback();
commit();发布于 2010-02-11 04:48:28
那不会做深坐的。事务被隔离在单个“数据库”中。为了让事务跨越多个数据库,您需要所谓的“分布式事务管理”。这样做的标准包括XTA。更多的面向企业的框架,包括Java J2EE,都将这类东西作为标准。
既然看起来您正在使用PHP,那么可以这么说,您将不得不使用自己的PHP。我假设Mysql支持嵌套事务(我不知道)。所以,如果两个数据库的内部事务都成功了,那么你就成功了…提交两个外部事务。如果内部事务之一失败,则回滚两个外部事务。
发布于 2010-02-11 09:03:15
mysql支持XA transactions,它允许像robert建议的那样进行两步提交,但以更正式的方式。PHP接口不直接支持XA事务,因此您必须自己将事务命令作为语句发送。
发布于 2010-02-11 07:02:51
您真正应该做的是,使用单个数据库连接来使用这两个数据库。
在MySQL中,“数据库”实际上更像是其他服务器中的“目录”或“模式”。在权限允许的情况下,可以在同一连接中使用其他数据库中的表。
https://stackoverflow.com/questions/2239810
复制相似问题