跨庫事務 mysql

2021-08-22 07:11:01 字數 1470 閱讀 4830

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驅動,...