四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

PHP mysql與mysqli事務(wù)使用說(shuō)明 分享

mysqli封裝了諸如事務(wù)等一些高級(jí)操作,同時(shí)封裝了DB操作過(guò)程中的很多可用的方法。

應(yīng)用比較多的地方是 mysqli的事務(wù)。

比如下面的示例:

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

$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();
}

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)始事務(wù)
$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ù)
還有一點(diǎn)要注意:MySQL默認(rèn)的行為是在每條SQL語(yǔ)句執(zhí)行后執(zhí)行一個(gè)COMMIT語(yǔ)句,從而有效的將每條語(yǔ)句獨(dú)立為一個(gè)事務(wù)。

但往往,我們需要在使用事務(wù)的時(shí)候,是需要執(zhí)行多條sql語(yǔ)句的。這就需要我們手動(dòng)設(shè)置MySQL的autocommit屬性為0,默認(rèn)為1。

同時(shí),使用START TRANSACTION語(yǔ)句顯式的打開(kāi)一個(gè)事務(wù) 。如上面的示例。

如果不這樣做,會(huì)有什么結(jié)果呢?

我們將上面第二段代碼中 //mysql_query(‘SET autocommit=0′); 和 // mysql_query($sql3); 注釋去掉,然后執(zhí)行。

此時(shí),mysql_query($sql3) 執(zhí)行就不會(huì)insert到數(shù)據(jù)庫(kù)中。

如果我們將 // mysql_query(‘SET autocommit=1′); 本句注釋去掉,那么mysql_query($sql3); 就會(huì)執(zhí)行成功。

通常COMMIT或ROLLBACK語(yǔ)句執(zhí)行時(shí)才完成一個(gè)事務(wù),但是有些DDL語(yǔ)句等會(huì)隱式觸發(fā)COMMIT。

比如下列語(yǔ)句

ALTER FUNCTION
ALTER PROCEDURE
ALTER TABLE
BEGIN
CREATE DATABASE
CREATE FUNCTION
CREATE INDEX
CREATE PROCEDURE
CREATE TABLE
DROP DATABASE
DROP FUNCTION
DROP INDEX
DROP PROCEDURE
DROP TABLE
UNLOCK TABLES
LOAD MASTER DATA
LOCK TABLES
RENAME TABLE
TRUNCATE TABLE
SET AUTOCOMMIT=1
START TRANSACTION

我們?cè)賮?lái)舉個(gè)例子看下。

復(fù)制代碼 代碼如下:
$sql1 = 'create table ScoreDetail_new(id int)';
$sql2 = 'rename table ScoreDetail to ScoreDetail_bak';
$sql3  = 'rename table ScoreDetail_new to ScoreDetail';

$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//開(kāi)始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
$mysqli->query($sql3);
if (!$mysqli->errno) {
 $mysqli->commit();
 echo 'ok';
} else {
 echo 'err';
 $mysqli->rollback();
}

上面的示例中,假如$sql2執(zhí)行出錯(cuò)了,$sql1照樣會(huì)執(zhí)行的。為什么呢?

因?yàn)閞ename在執(zhí)行的時(shí)候,mysql默認(rèn)會(huì)先執(zhí)行commit,再執(zhí)行rename。

注意

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了。

php技術(shù)PHP mysql與mysqli事務(wù)使用說(shuō)明 分享,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 抖音网页版电脑版| 彻夜狂欢| 变形金刚7免费高清电影| 回响电视剧演员表| 天津电视台体育频道| 地理填充图册| 七令诡事录 电影| 椿十三郎| juliaann女医生在办公室| 崔哲浩| 饶太郎| cad| stevenson| 电影名:《被囚禁的人》| 爱上特种兵电视剧免费观看完整版 | superstar电影在线播放| 有栖花绯日剧免费观看| 女孩的叔叔| 女同视频在线观看| 性视频动态图| kanako| 无锡电视台| 教育向美而生读书心得体会| 包公决战潘金莲| 田中敦子| 北京卫视今天节目预告| 荒笛子简谱| b超怎么看是男孩女孩| 电影《kiskisan》在线观看| 巴霍巴利王2国语版在线观看免费| 视觉暂留现象原理| 洛可希佛帝的电影| 女明星曝光| 范瑞君| 无懈可击图片| 除暴2 电影| 四年级第一二单元测试卷答案| 冬日舞蹈教程完整版| 11.27| 日本电影完整版| 黄子华最新电影|