ホームページ >バックエンド開発 >PHPチュートリアル >異なるライブラリのテーブルを同時に操作するのですが、MySQL はサポートされていますか?

異なるライブラリのテーブルを同時に操作するのですが、MySQL はサポートされていますか?

WBOY
WBOYオリジナル
2016-06-20 12:45:301115ブラウズ

MYSQL データベース

データベース A とデータベース B があります。A の 2 つのテーブルと B の 2 つのテーブルは同時に操作されます。どちらも innodb です。 。

2 つの状況があります
ライブラリ A とライブラリ B は同じサーバー上にあります
ライブラリ A とライブラリ B は同じサーバー上にありません

マスターに問い合わせてください


ディスカッションへの返信 (解決策)

ライブラリ A とライブラリ B同じサーバー上にある必要があります サポートされています

ライブラリ A とライブラリ B は同じサーバー上にないため、同時にアクセスすることはできません 当然、トランザクションは発生しません

ライブラリ Aライブラリ A とライブラリ B は同じサーバー上にあるため、サポートされる必要があります。

ライブラリ A とライブラリ B は同じサーバー上になく、同時にアクセスできないため、当然トランザクションは発生しません

ライブラリ A とライブラリ B は同じサーバー上にあります
ライブラリ A とライブラリ B は同じサーバー上にありません サーバー
両方ともトランザクションをサポートしています。

分散トランザクションが使用できます

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

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

最終送信の場合stage A は正常に送信されたが、B は失敗した場合はどうすればよいですか?

ロールバックします。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。