溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

PHP怎么操作MySQL事務(wù)

發(fā)布時(shí)間:2021-06-30 15:42:27 來(lái)源:億速云 閱讀:119 作者:chen 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“PHP怎么操作MySQL事務(wù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“PHP怎么操作MySQL事務(wù)”吧!

本文實(shí)例講述了PHP操作MySQL事務(wù)的方法,分享給大家供大家參考。具體方法如下:

一般來(lái)說(shuō),事務(wù)都應(yīng)該具備ACID特征。所謂ACID是Atomic(原子性),Consistent(一致性),Isolated(隔離性),Durable(持續(xù)性)四個(gè)詞的首字母所寫(xiě),下面以“銀行轉(zhuǎn)帳”為例來(lái)分別說(shuō)明一下它們的含義:

① 原子性:組成事務(wù)處理的語(yǔ)句形成了一個(gè)邏輯單元,不能只執(zhí)行其中的一部分。換句話說(shuō),事務(wù)是不可分割的最小單元。比如:銀行轉(zhuǎn)帳過(guò)程中,必須同時(shí)從一個(gè)帳戶(hù)減去轉(zhuǎn)帳金額,并加到另一個(gè)帳戶(hù)中,只改變一個(gè)帳戶(hù)是不合理的。
② 一致性:在事務(wù)處理執(zhí)行前后,數(shù)據(jù)庫(kù)是一致的。也就是說(shuō),事務(wù)應(yīng)該正確的轉(zhuǎn)換系統(tǒng)狀態(tài)。比如:銀行轉(zhuǎn)帳過(guò)程中,要么轉(zhuǎn)帳金額從一個(gè)帳戶(hù)轉(zhuǎn)入另一個(gè)帳戶(hù),要么兩個(gè)帳戶(hù)都不變,沒(méi)有其他的情況。
③ 隔離性:一個(gè)事務(wù)處理對(duì)另一個(gè)事務(wù)處理沒(méi)有影響。就是說(shuō)任何事務(wù)都不可能看到一個(gè)處在不完整狀態(tài)下的事務(wù)。比如說(shuō),銀行轉(zhuǎn)帳過(guò)程中,在轉(zhuǎn)帳事務(wù)沒(méi)有提交之前,另一個(gè)轉(zhuǎn)帳事務(wù)只能處于等待狀態(tài)。
④ 持續(xù)性:事務(wù)處理的效果能夠被永久保存下來(lái)。反過(guò)來(lái)說(shuō),事務(wù)應(yīng)當(dāng)能夠承受所有的失敗,包括服務(wù)器、進(jìn)程、通信以及媒體失敗等等。比如:銀行轉(zhuǎn)帳過(guò)程中,轉(zhuǎn)帳后帳戶(hù)的狀態(tài)要能被保存下來(lái)。

在PHP中,mysqli 已經(jīng)很好的封裝了mysql事務(wù)的相關(guān)操作。如下示例:

復(fù)制代碼 代碼如下:

$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail  set FScore = 300 where ID= '123456'";
$sql3 = "insert into  ScoreDetail ID,Score) values ('123456',60)";
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//開(kāi)始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
  $mysqli->commit();
  echo 'ok';
}else{
 echo 'err';
  $mysqli->rollback();
}


在這里,我們?cè)偈褂?php mysql 系列函數(shù)執(zhí)行事務(wù)。

復(fù)制代碼 代碼如下:

$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail  set FScore = 300 where ID= '123456'";
$sql3 = "insert into  ScoreDetail ID,Score) values ('123456',60)";
$conn = mysql_connect('localhost','root','');
mysql_select_db('DB_Lib2Test');
mysql_query('start transaction');
//mysql_query('SET autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ()){
    mysql_query('rollback');
    echo 'err';
}else{
    mysql_query('commit');
    echo 'ok';
}
// mysql_query('SET autocommit=1');
// mysql_query($sql3);

在這里要注意:

MyISAM:不支持事務(wù),用于只讀程序提高性能
InnoDB:支持ACID事務(wù)、行級(jí)鎖、并發(fā)
Berkeley DB:支持事務(wù)

到此,相信大家對(duì)“PHP怎么操作MySQL事務(wù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI