三分鐘掌握MySQL中事務(wù)的處理

本文主要給大家介紹MySQL中事務(wù)的處理,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下MySQL中事務(wù)的處理吧。

創(chuàng)新互聯(lián)公司主要企業(yè)基礎(chǔ)官網(wǎng)建設(shè),電商平臺建設(shè),移動(dòng)手機(jī)平臺,微信小程序開發(fā)等一系列專為中小企業(yè)按需設(shè)計(jì)網(wǎng)站產(chǎn)品體系;應(yīng)對中小企業(yè)在互聯(lián)網(wǎng)運(yùn)營的各種問題,為中小企業(yè)在互聯(lián)網(wǎng)的運(yùn)營中保駕護(hù)航。

步驟:

1.開啟事務(wù) start transaction

當(dāng)我們開啟一個(gè)事務(wù)的時(shí)候,我們對sql的操作都發(fā)生在內(nèi)存中,但是沒有真正的反饋到數(shù)據(jù)庫磁盤的文件中!

2.回滾 rollback

回滾,就是恢復(fù)到事務(wù)開啟之前的最原始的狀態(tài)!

注意:回滾操作會(huì)自動(dòng)的關(guān)閉一個(gè)事務(wù),如果想再次執(zhí)行事務(wù),需要重新開啟事務(wù)!

3.提交 commit

事務(wù)的基本原理

普通的執(zhí)行,之所以是立即執(zhí)行并生效,因?yàn)槟J(rèn)的,MySQL對sql語句的執(zhí)行是自動(dòng)提交的!所以,開啟一個(gè)事務(wù)的本質(zhì),就是關(guān)閉了以前的自動(dòng)提交的功能,而是由用戶手動(dòng)提交(利用commit語句)!

總結(jié)事務(wù)的步驟:

1,  開啟事務(wù)

2,  如果執(zhí)行成功,就提交commit

3,  如果有任何一條sql語句執(zhí)行失敗,則回滾rollback!

事務(wù)處理最典型的就是借還錢。下面以張三向李四還1000元為例

首先查看數(shù)據(jù)庫中各自的錢數(shù)

三分鐘掌握MySQL中事務(wù)的處理

下面是處理還錢事務(wù)的代碼:

<?php 

/**
* MySQL實(shí)現(xiàn)事務(wù)操作
*/

echo "<meta charset=utf-8>";

// 1 連接數(shù)據(jù)庫
$link = @mysql_connect('localhost','root','') or die('連接數(shù)據(jù)庫失敗');
mysql_select_db('test',$link);mysql_query('set names utf8');

// 2  開啟事務(wù)
mysql_query("start transaction");
//設(shè)置一個(gè)變量,用來判斷所有sql語句是否成功
$flag = true;

// 2.1執(zhí)行事務(wù)中的一組sql語句

// 李四的money+1000
$sql = "update pdo set mone=money+1000 where name='李四'";
$res = mysql_query($sql);
if (!$res) {  
   //若sql語句執(zhí)行失敗,把$falg設(shè)置為false    $flag = false; }

//張三的money-1000
$sql = "update pdo set money=money-1000 where name='張三'";
$res = mysql_query($sql);
if (!$res) {  
   //若sql語句執(zhí)行失敗,把$falg設(shè)置為false    $flag = false; }

// 2.2 判斷事務(wù)是否執(zhí)行成功
if ($flag) {  
   //所有sql語句執(zhí)行成功,把sql語句提交    mysql_query('commit');    echo "還錢成功!"; }else{  
   // 如其中一條執(zhí)行失敗,則回滾到事務(wù)開啟之前的狀態(tài)    mysql_query('rollback');    echo "還錢失??!"; }

結(jié)果:

三分鐘掌握MySQL中事務(wù)的處理

三分鐘掌握MySQL中事務(wù)的處理

下面,我們故意把其中一個(gè)字段寫錯(cuò),看看事務(wù)是否正常處理,數(shù)據(jù)庫中的錢數(shù)是否有變化!

// 李四的money+1000
$sql = "update pdo set mone=money+1000 where name='李四'";  //把moeny字段錯(cuò)寫成mone

結(jié)果:

三分鐘掌握MySQL中事務(wù)的處理

三分鐘掌握MySQL中事務(wù)的處理

結(jié)果是還錢失敗,并且數(shù)據(jù)庫中各自的錢數(shù)沒有變化,說明當(dāng)某一條語句未執(zhí)行成功時(shí),事物不會(huì)提交,而會(huì)回滾,把數(shù)據(jù)恢復(fù)到開始事務(wù)之前的原始狀態(tài),這也是使用事務(wù)的作用,即只有當(dāng)事務(wù)中所有sql語句全部執(zhí)行成功,事務(wù)才會(huì)提交,否則會(huì)回滾!

以上就是MySQL中事務(wù)的處理的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

文章題目:三分鐘掌握MySQL中事務(wù)的處理
分享路徑:http://muchs.cn/article40/jcpoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)頁設(shè)計(jì)公司、小程序開發(fā)動(dòng)態(tài)網(wǎng)站微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)