如果我使用两个数据库,我必须开始交易?这是正确的,还是这段代码错了?如果我在第二个查询中出错,那么调用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();
Run Code Online (Sandbox Code Playgroud)
那不会蹲下来.事务在单个"数据库"中被隔离.为了使事务跨越多个数据库,您需要所谓的"分布式事务管理".这样做的标准包括XTA.更多面向企业的框架(包括Java J2EE)将此类内容作为标准包含在内.
既然你看起来像是在使用PHP,那么你就必须自己动手,可以这么说.我假设Mysql支持嵌套事务(我不知道).所以,如果两个db上的内部事务都成功,那么你很好......提交两个外部事务.如果任一内部事务失败,则回滚两个外部事务.
您真正应该做的是,使用单个数据库连接来使用两个数据库。
在MySQL中,“数据库”实际上更像是其他服务器中的“目录”或“模式”。您可以在权限允许的情况下在同一连接中使用来自另一个数据库的表。