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

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類型的數(shù)據(jù)表才能支持事務(wù)處理!其他的類型是不支持的!

***:一般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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品青草久久久久福利99 | 38pao强力打造永久免费高清视频 | 亚洲精品www久久久久久 | 五月婷丁香 | 激情总合网 | 国产美女在线免费观看 | 浮力影院第一页小视频国产在线观看免费 | 亚洲图片偷拍区 | 亚洲最新视频在线观看 | 天干天干夜天干天天爽 | 久久综合九色综合97婷婷女人 | 亚洲综合在线成人一区 | 日韩精品国产自在久久现线拍 | 四虎影视国产精品永久在线 | 五月婷婷开心网 | 91精品视频免费观看 | 真实国产伦在线视频免费播放 | 婷婷亚洲久悠悠色在线播放 | 国产成人福利在线 | 99精品视频在线播放2 | 国产热视频 | 亚洲成人福利在线 | 日本xxx在线观看 | 伊人网综合 | 成年女人免费又黄又爽视频 | 久久丝袜精品中文字幕 | 97精品国产自在现线免费观看 | 成人的天堂视频一区二区三区 | 久久98精品久久久久久婷婷 | 99在线精品免费视频九九视 | 婷婷夜夜躁天天躁人人躁 | 国产网站免费视频 | 最新精品在线视频 | 色综合五月激情综合色一区 | 四虎永久在线观看视频精品 | 亚洲综合一二三区 | 亚洲另类激情专区小说婷婷久 | 成人成人性区 | 五月婷婷丁香在线视频 | 成人午夜免费视频 | 午夜91|