mysql 跨庫事務
一般事務:
$this->db()->begintransaction;
$res = $this->db()->insert();
//or
do something else
if(!$res)
$this->db()->commit();
but you maybe get different things,like that:
$this->db()->begintransaction;
$res = $this->db()->insert();
//or
do something else
if(!$res)
$res = $this->db_old()->insert(); // change the database
//or
do something else
for $this->db_old()
if(!$res)
$this->db()->commit();
like that ,you can get wrong. mysql cannot do that .
start transaction at database one ,and do action at databse two , but rollback and commit at databse one .
maybe you can do it like this:
$this->db()->begintransaction;
$this->db_old()->begintransaction;
$res = $this->db()->insert(); // change the database
//or
do something else
for $this->db()
if(!$res)
$res = $this->db_old()->insert(); // change the database
//or
do something else
for $this->db_old()
if(!$res)
$this->db()->commit();
$this->db_old()->commit();
seperate the database db() and db_old(),make one transaction to two.
總結:
1 裝b真累
2 mysql跨庫事務是不可行的(純源生sql沒試過),但是在自封框架中,每個database(例項db())都必需自開乙個事務,這樣其實每個database的事務是並行的,但是不能乙個database的事務中包含其他database的非事務操作。
跨資料庫事務
多資料庫伺服器事務提交 key為connname,value為sql語句 public bool executemultitran listsqlstrings catch exception ex if issuccess 如果當前事務失敗,把執行過的所有事務物件rollback if issuc...
詳解Mysql分布式事務XA(跨資料庫事務)
在開發中,為了降低單點壓力,通常會根據業務情況進行分表分庫,將表分布在不同的庫中 庫可能分布在不同的機器上 在這種場景下,事務的提交會變得相對複雜,因為多個節點 庫 的存在,可能存在部分節點提交失敗的情況,即事務的acid特性需要在各個不同的資料庫例項中保證。比如更新db1庫的a表時,必須同步更新d...
跨庫事務解決方案
1 考慮使用jta等支援分布式事務的事務管理器 這種方案的優勢就是直接有現成的解決方案,一般的j2ee伺服器都提供了jta的相關的實現。比較明顯的問題就是解決方案太重量級。一般jta除了伺服器要支援,對應的資料庫服務廠商一般也要提供相應的商業支援,主要是提供基於 xaresource jdbc驅動,...