> 백엔드 개발 > PHP 튜토리얼 > 同时操作不同库里表,支持事物吗,mysql解决办法

同时操作不同库里表,支持事物吗,mysql解决办法

WBOY
풀어 주다: 2016-06-13 12:26:46
원래의
1404명이 탐색했습니다.

同时操作不同库里表,支持事物吗,mysql
MYSQL数据库

有数据库A和数据库B,同时操作A中两张表和B中两张表,支持事物回滚么,都是innodb。。

分两种情况
A库和B库在同一台服务器
A库和B库不在同一台服务器

请教大神
------解决思路----------------------
A库和B库在同一台服务器
A库和B库不在同一台服务器
两个都支持事务。

可以使用分布式事务

<br />public function testAction(){<br />        $goods_id=1;<br />        $goods_name = "大西瓜";<br />        $num = 1;<br />        $rs_order = $this->test->createorder($goods_id,$goods_name,$num);<br />        $rs_goods = $this->test->deduction($goods_id,$num);<br />        if($rs_order['status'] =="success" && $rs_goods['status']=="success"){<br />            $this->test->commitdb($rs_order['XA']);<br />            $this->test->commitdb1($rs_goods['XA']);<br />        }else{<br />            $this->test->rollbackdb($rs_order['XA']);<br />            $this->test->rollbackdb1($rs_goods['XA']);<br />        }<br />        <br />        print_r($rs_order);<br />        echo "<br />";<br />        print_r($rs_goods);<br />        die("dddd");<br />    }<br />    <br />    public function createorder($goods_id,$goods_name,$num){<br />        $XA = uniqid("");<br />        $this->_db->query("XA START '$XA'");<br />        $_rs = true;<br />        try {<br />            $data = array();<br />            $data['order_id'] = "V".date("YmdHis");<br />            $data['goods_name'] = $goods_name;<br />            $data['goods_num'] = $num;<br />            $this->_db->insert("temp_orders",$data);<br />            $rs =  $this->_db->lastInsertId();<br />            if($rs){<br />                $_rs = true;<br />            }else{<br />                $_rs = false;<br />            }<br />        } catch (Exception $e) {<br />            $_rs = false;<br />        }<br />        $this->_db->query("XA END '$XA'");<br />         if($_rs){<br />                 $this->_db->query("XA PREPARE '$XA'");<br />                 return array("status"=>"success","XA"=>$XA);<br />         }else{<br />                 return array("status"=>"nosuccess","XA"=>$XA);<br />         }<br />    }<br />    <br />    public function deduction($id){<br />        $XA = uniqid("");<br />        $this->db1->query("XA START '$XA'");<br />        $last_rs = true;<br />        try {<br />                $sql = "select * from temp_goods where id = '$id' and goods_num>0";<br />                $rs = $this->db1->fetchRow($sql);<br />                if(!empty($rs)){<br />                    $sql = "update temp_goods set goods_num = goods_num-1 where id = '$id'";<br />                    $rd = $this->db1->query($sql);<br />                    if($rd){<br />                        $last_rs = true;<br />                    }else{<br />                        $last_rs = false;<br />                    }<br />                }else{<br />                        $last_rs = false;;<br />                }<br />        } catch (Exception $e) {<br />             $last_rs = false;;<br />        }<br />         $this->db1->query("XA END '$XA'");<br />         <br />         if($last_rs){<br />                 $this->db1->query("XA PREPARE '$XA'");<br />                 return array("status"=>"success","XA"=>$XA);<br />         }else{<br />                 return array("status"=>"nosuccess","XA"=>$XA);<br />         }<br />    <br />    }<br />    //提交事务!<br />    public function commitdb($xa){<br />        return $this->_db->query("XA COMMIT '$xa'");<br />    }<br />    <br />    //回滚事务<br />    public function rollbackdb($xa){<br />        return $this->_db->query("XA ROLLBACK '$xa'");<br />    }<br />    <br />    //提交事务!<br />    public function commitdb1($xa){<br />        return $this->db1->query("XA COMMIT '$xa'");<br />    }<br />    <br />    //回滚事务<br />    public function rollbackdb1($xa){<br />        return $this->db1->query("XA ROLLBACK '$xa'");<br />    }<br /><br />
로그인 후 복사

参考:http://javalifuqing.blog.163.com/blog/static/83699035201341645329839/

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿