1、首先數(shù)據(jù)庫(kù)是要支持事務(wù)的,如InnoDb,不支持的如Myisam.
2、作用:主要是為了在有關(guān)數(shù)據(jù)庫(kù)的組合操作、多表操作中,都需要進(jìn)行數(shù)據(jù)處理,以防數(shù)據(jù)丟失.
3、簡(jiǎn)單點(diǎn)的例子:a給b打錢,a數(shù)據(jù)庫(kù)的錢應(yīng)該減少,b數(shù)據(jù)庫(kù)的錢應(yīng)該增多,若a數(shù)據(jù)庫(kù)操作成功,但是b的操作失敗,這樣就會(huì)出現(xiàn)問題.
4、事務(wù)是DBMS得執(zhí)行單位,一般來說,事務(wù)是必須滿足4個(gè)條件(ACID).
a.原子性(Autmic):事務(wù)在執(zhí)行性,要做到“要么不做,要么全做”,不允許事務(wù)部分執(zhí)行.
b.一致性(Consistency):事務(wù)得操作應(yīng)該使使數(shù)據(jù)庫(kù)從一個(gè)一致狀態(tài)轉(zhuǎn)變倒另一個(gè)一致得狀態(tài),修改的數(shù)據(jù)之間應(yīng)該有所關(guān)聯(lián).
c.隔離性(Isolation):如果多個(gè)事務(wù)并發(fā)執(zhí)行,應(yīng)象各個(gè)事務(wù)獨(dú)立執(zhí)行一樣.
d.持久性(Durability):一個(gè)成功執(zhí)行得事務(wù)對(duì)數(shù)據(jù)庫(kù)得作用是持久得,即使數(shù)據(jù)庫(kù)應(yīng)故障出錯(cuò),也應(yīng)該能夠恢復(fù).
5、實(shí)例:
- //實(shí)例化的數(shù)據(jù)庫(kù)對(duì)象
- $model = new Model();
- //開啟事務(wù)
- $model->startTrans();
- //默認(rèn)結(jié)果
- $judge = true;
- //數(shù)據(jù)操作
- $sql1 ="delete from TableOne where ...";
- $sql2 ="delete from TableTwo where ...";
- //執(zhí)行數(shù)據(jù)操作
- $result1 = $model->query($sql1);
- if(!$result1) $judge = false;
- $result2 = $model->query($sql2);
- if(!$result2) $judge = false;
- if($judge){
- //如果2條都執(zhí)行成功,則提交完成數(shù)據(jù)庫(kù)操作
- //Vevb.com
- $db->commit();
- }else{
- //如果有其中一條執(zhí)行失敗,則rollback,所有數(shù)據(jù)還原到 sql1和sql2都沒執(zhí)行的狀態(tài)。
- $db->rollback();
- }
新聞熱點(diǎn)
疑難解答
圖片精選