《MYSQL數(shù)據(jù)庫(kù)mysql 事務(wù)處理及表鎖定深入簡(jiǎn)析》要點(diǎn):
本文介紹了MYSQL數(shù)據(jù)庫(kù)mysql 事務(wù)處理及表鎖定深入簡(jiǎn)析,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL的事務(wù)處理主要有兩種辦法.
1、用begin,rollback,commit來(lái)實(shí)現(xiàn) begin 開(kāi)始一個(gè)事務(wù)
rollback 事務(wù)回滾
commit 事務(wù)確認(rèn)
2、直接用set來(lái)改變mysql的自動(dòng)提交模式 MYSQL默認(rèn)是自動(dòng)提交的,也就是你提交一個(gè)QUERY,它就直接執(zhí)行!我們可以通過(guò)
set autocommit=0 禁止自動(dòng)提交
set autocommit=1 開(kāi)啟自動(dòng)提交
來(lái)實(shí)現(xiàn)事務(wù)的處理.
當(dāng)你用 set autocommit=0 的時(shí)候,你以后所有的SQL都將做為事務(wù)處理,直到你用commit確認(rèn)或rollback結(jié)束.
注意當(dāng)你結(jié)束這個(gè)事務(wù)的同時(shí)也開(kāi)啟了個(gè)新的事務(wù)!按第一種辦法只將當(dāng)前的作為一個(gè)事務(wù)!
個(gè)人推薦使用第一種辦法!
MYSQL中只有INNODB和BDB類(lèi)型的數(shù)據(jù)表才能支持事務(wù)處理!其他的類(lèi)型是不支持的!
***:一般MYSQL數(shù)據(jù)庫(kù)默認(rèn)的引擎是MyISAM,這種引擎不支持事務(wù)!如果要讓MYSQL支持事務(wù),可以自己手動(dòng)
修改:
辦法如下:
1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件.
2.在運(yùn)行中輸入:services.msc,重啟mysql服務(wù).
3.到phpmyadmin中,mysql->show engines;(或執(zhí)行mysql->show variables like 'have_%'; ),查看InnoDB為YES,即表示數(shù)據(jù)庫(kù)支持InnoDB了.
也就說(shuō)明支持事務(wù)transaction了.
4.在創(chuàng)建表時(shí),就可以為Storage Engine選擇InnoDB引擎了.如果是以前創(chuàng)建的表,可以使用mysql->alter table table_name type=InnoDB;
或 mysql->alter table table_name engine=InnoDB;來(lái)改變數(shù)據(jù)表的引擎以支持事務(wù).
以下是測(cè)試的實(shí)例代碼
代碼如下:
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
//若不使用事務(wù),t$sql執(zhí)行成功,$sql1執(zhí)行失敗
$sql = " insert into test values('11','88') ";
$sql1 = " insert into test values('11','88','444') ";
$res = mysql_query($sql);
$res1 = mysql_query($sql1);
//因?yàn)槭褂昧耸聞?wù),tinsert都執(zhí)行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
mysql_query("SET AUTOCOMMIT=0"); //O置mysql不自猶嶠唬枳孕杏commitZ句提交
$sql = " insert into test values('11','88') ";
$sql1 = " insert into test values('11','88','444') ";
$res = mysql_query($sql);
$res1 = mysql_query($sql1);
//因?yàn)槭褂昧耸挛?則兩個(gè)insert都執(zhí)行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
對(duì)于不支持事務(wù)的MyISAM引擎數(shù)據(jù)庫(kù)可以使用表鎖定的辦法:
代碼如下:
代碼如下:
//MyISAM & InnoDB 都支持,
//Notes:query語(yǔ)句不克不及寫(xiě)在一起如:mysql_query("select * from a;select * from b;");
$sql_1=" LOCK TABLES test WRITE ";
mysql_query($sql_1);
$sql_2=" INSERT INTO test VALUES('".$a."','".$b."') ";
if(mysql_query($sql_2)){
echo 'successful!';
}else{
echo 'Unsuccessful!';
}
$sql_3=" UNLOCK TABLES ";
mysql_query($sql_3);
《MYSQL數(shù)據(jù)庫(kù)mysql 事務(wù)處理及表鎖定深入簡(jiǎn)析》是否對(duì)您有啟發(fā),歡迎查看更多與《MYSQL數(shù)據(jù)庫(kù)mysql 事務(wù)處理及表鎖定深入簡(jiǎn)析》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/13625.html