欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql 事務(wù)處理及表鎖定深入簡(jiǎn)析

 更新時(shí)間:2012年11月26日 11:50:01   作者:  
本文將詳細(xì)介紹mysql 事務(wù)處理及表鎖定,需要了解更多的朋友可以參考下
MYSQL的事務(wù)處理主要有兩種方法。
1、用begin,rollback,commit來實(shí)現(xiàn)
begin 開始一個(gè)事務(wù)
rollback 事務(wù)回滾
commit 事務(wù)確認(rèn)
2、直接用set來改變mysql的自動(dòng)提交模式
MYSQL默認(rèn)是自動(dòng)提交的,也就是你提交一個(gè)QUERY,它就直接執(zhí)行!我們可以通過
set autocommit=0 禁止自動(dòng)提交
set autocommit=1 開啟自動(dòng)提交
來實(shí)現(xiàn)事務(wù)的處理。
當(dāng)你用 set autocommit=0 的時(shí)候,你以后所有的SQL都將做為事務(wù)處理,直到你用commit確認(rèn)或rollback結(jié)束。
注意當(dāng)你結(jié)束這個(gè)事務(wù)的同時(shí)也開啟了個(gè)新的事務(wù)!按第一種方法只將當(dāng)前的作為一個(gè)事務(wù)!
個(gè)人推薦使用第一種方法!

MYSQL中只有INNODB和BDB類型的數(shù)據(jù)表才能支持事務(wù)處理!其他的類型是不支持的!
***:一般MYSQL數(shù)據(jù)庫默認(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ù)庫支持InnoDB了。
也就說明支持事務(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;來改變數(shù)據(jù)表的引擎以支持事務(wù)。
以下是測(cè)試的實(shí)例代碼
復(fù)制代碼 代碼如下:

mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
//若不使用事務(wù),則$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ù),則兩個(gè)insert都執(zhí)行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
mysql_query("SET AUTOCOMMIT=0"); //設(shè)置mysql不自動(dòng)提交,需自行用commit語句提交
$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ù)庫可以使用表鎖定的方法:
代碼如下:
復(fù)制代碼 代碼如下:

//MyISAM & InnoDB 都支持,
//Notes:query語句不能寫在一起如: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);

相關(guān)文章

  • mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作實(shí)例分析

    mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作實(shí)例分析

    這篇文章主要介紹了mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作,結(jié)合實(shí)例形式分析了mysql創(chuàng)建及使用多個(gè)觸發(fā)器的相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • MySQL之終端Terminal(dos界面)管理數(shù)據(jù)庫、數(shù)據(jù)表、數(shù)據(jù)的基本操作

    MySQL之終端Terminal(dos界面)管理數(shù)據(jù)庫、數(shù)據(jù)表、數(shù)據(jù)的基本操作

    這篇文章主要介紹了MySQL之終端(Terminal)管理數(shù)據(jù)庫、數(shù)據(jù)表、數(shù)據(jù)的基本操作,需要的朋友可以參考下
    2015-03-03
  • 最新評(píng)論