跨資料庫事務

2021-09-06 15:50:20 字數 1954 閱讀 6538

///

///多資料庫伺服器事務提交

/// ///

key為connname,value為sql語句

///public

bool executemultitran(listsqlstrings)}}

catch

(exception ex)

if (!issuccess)}}

//如果當前事務失敗,把執行過的所有事務物件rollback

if (!issuccess)

reval = false

; }

else

}//關閉conn

foreach (sqlconnection value in

connresult.values)

}return

reval;

}public sqlconnection createconnection(string

keyname)

呼叫:

//

1.扣減玩家拍幣數

//2.增加玩家保險櫃金豆數

//3.插入拍幣兌換記錄

private

bool procdata(int userid, int pats, int convertrate, string

clientip)

);//2.增加玩家保險櫃金豆數

sql = "

update gamescoreinfo set insurescore=insurescore+

" + pats * convertrate + "

where userid=

" +userid;

sqls.add(

newstring );

//3.插入拍幣兌換記錄

sql = "

insert into recordconvertuserpat (recordid,userid,curinsurescore,curuserpat,convertuserpat,convertrate,isgameplaza,clientip,collectdate) values(";

sql += ((int)gdata.selectvalue("

select max(recordid) from recordconvertuserpat

", "

dbrecord

", 0) + 1) + ","

; sql += userid + ","

; sql += gdata.selectvalue("

select insurescore from gamescoreinfo where userid=

" + userid, "

dbtreasure

", 0) + ","

; sql += gdata.selectvalue("

select userpat from accountsinfo where userid=

" + userid, "

dbaccounts

", 0) + ","

; sql += pats + ","

; sql += convertrate + ","

; sql += "1,"

; sql += "

'" + clientip + "',"

; sql += "

'" + system.datetime.now.tostring() + "'"

; sql += ")"

; sqls.add(

newstring );

return

gdata.executemultitran(sqls);

}

詳解Mysql分布式事務XA(跨資料庫事務)

在開發中,為了降低單點壓力,通常會根據業務情況進行分表分庫,將表分布在不同的庫中 庫可能分布在不同的機器上 在這種場景下,事務的提交會變得相對複雜,因為多個節點 庫 的存在,可能存在部分節點提交失敗的情況,即事務的acid特性需要在各個不同的資料庫例項中保證。比如更新db1庫的a表時,必須同步更新d...

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...