一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

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

比如下面的示例:

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

$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//開始事物
$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); // 開始事務(wù)
$mysqli->query($sql1);
$mysqli->query($sql2);
if (!$mysqli->errno) {
 $mysqli->commit();
 echo 'ok';
} else {
 echo 'err';
 $mysqli->rollback();
}

在這里,我們再使用 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ù)、行級鎖、并發(fā)
Berkeley DB:支持事務(wù)
還有一點要注意:MySQL默認(rèn)的行為是在每條SQL語句執(zhí)行后執(zhí)行一個COMMIT語句,從而有效的將每條語句獨立為一個事務(wù)。

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

同時,使用START TRANSACTION語句顯式的打開一個事務(wù) 。如上面的示例。

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

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

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

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

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

比如下列語句

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

我們再來舉個例子看下。

復(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);//開始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
$mysqli->query($sql3);
if (!$mysqli->errno) {
 $mysqli->commit();
 echo 'ok';
} else {
 echo 'err';
 $mysqli->rollback();
}

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

因為rename在執(zhí)行的時候,mysql默認(rèn)會先執(zhí)行commit,再執(zhí)行rename。

注意

MYSQL中只有INNODB和BDB類型的數(shù)據(jù)表才能支持事務(wù)處理!其他的類型是不支持的!

***:一般MYSQL數(shù)據(jù)庫默認(rèn)的引擎是MyISAM,這種引擎不支持事務(wù)!如果要讓MYSQL支持事務(wù),可以自己手動修改:

方法如下:1.修改c:/appserv/mysql/my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。

2.在運行中輸入:services.msc,重啟mysql服務(wù)。

3.到phpmyadmin中,mysql->show engines;(或執(zhí)行mysql->show variables like 'have_%'; ),查看InnoDB為YES,即表示數(shù)據(jù)庫支持InnoDB了。
也就說明支持事務(wù)transaction了。

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

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

主站蜘蛛池模板: 久久久久久久一精品 | 国产综合91天堂亚洲国产 | 5月婷婷6月丁香 | 亚洲成a人一区二区三区 | 国产日韩欧美综合色视频在线 | 国产小视频福利 | 日韩欧美伊人久久大香线蕉 | 扒开双腿猛进入无遮挡软件 | 国产精品视频一区二区三区经 | 伊人热人久久中文字幕 | 日韩亚洲欧洲在线rrrr片 | 欧美日韩国产一区三区 | 久久久亚洲精品国产 | 91久久网 | 我要看三级全黄 | 日本视频一区二区免费播放 | 久久久精品麻豆 | 91成年人 | 国产精品玖玖玖在线观看 | 六月丁香婷婷激情国产 | 伊人色综合久久天天 | 一本之道一区三区 | 亚洲人成人网毛片在线播放 | 国产成人精品久久一区二区小说 | 国内精品一区二区三区最新 | 亚洲国产婷婷综合在线精品 | 成人免费观看在线网址 | 91精品国产福利尤物 | 激情小视频在线 | 欧美综合激情 | 亚洲香蕉伊在人在线观看9 亚洲香蕉伊综合在人在线 亚洲香蕉影院 | 国产精品国产色综合色 | 国内精品免费久久久久妲己 | 美女性色| 成人午夜在线播放 | 视色4se视频在线观看 | 国产夫妻精品 | 成人中文字幕一区二区三区 | 国产一级二级在线观看 | 日日碰碰视频播放 | 青草精品|