首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个数据库和事务

问多个数据库和事务
EN

Stack Overflow用户
提问于 2010-02-11 03:44:50
回答 3查看 13.8K关注 0票数 6

如果我使用两个数据库,我必须开始交易吗?这是正确的,还是这个代码是错误的?如果我在第二个查询中犯了错误,那么调用rollback(),但不幸的是不会回滚第一个查询...

代码语言:javascript
复制
 $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();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-11 04:48:28

那不会做深坐的。事务被隔离在单个“数据库”中。为了让事务跨越多个数据库,您需要所谓的“分布式事务管理”。这样做的标准包括XTA。更多的面向企业的框架,包括Java J2EE,都将这类东西作为标准。

既然看起来您正在使用PHP,那么可以这么说,您将不得不使用自己的PHP。我假设Mysql支持嵌套事务(我不知道)。所以,如果两个数据库的内部事务都成功了,那么你就成功了…提交两个外部事务。如果内部事务之一失败,则回滚两个外部事务。

票数 8
EN

Stack Overflow用户

发布于 2010-02-11 09:03:15

mysql支持XA transactions,它允许像robert建议的那样进行两步提交,但以更正式的方式。PHP接口不直接支持XA事务,因此您必须自己将事务命令作为语句发送。

票数 18
EN

Stack Overflow用户

发布于 2010-02-11 07:02:51

您真正应该做的是,使用单个数据库连接来使用这两个数据库。

在MySQL中,“数据库”实际上更像是其他服务器中的“目录”或“模式”。在权限允许的情况下,可以在同一连接中使用其他数据库中的表。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2239810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档