天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP mysql與mysqli事務使用說明 分享

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

應用比較多的地方是 mysqli的事務。

比如下面的示例:

復制代碼 代碼如下:

$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 已經很好的封裝了mysql事務的相關操作。如下示例:

復制代碼 代碼如下:
$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); // 開始事務
$mysqli->query($sql1);
$mysqli->query($sql2);
if (!$mysqli->errno) {
 $mysqli->commit();
 echo 'ok';
} else {
 echo 'err';
 $mysqli->rollback();
}

在這里,我們再使用 php mysql 系列函數執行事務。

復制代碼 代碼如下:
$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:不支持事務,用于只讀程序提高性能
InnoDB:支持ACID事務、行級鎖、并發
Berkeley DB:支持事務
還有一點要注意:MySQL默認的行為是在每條SQL語句執行后執行一個COMMIT語句,從而有效的將每條語句獨立為一個事務。

但往往,我們需要在使用事務的時候,是需要執行多條sql語句的。這就需要我們手動設置MySQL的autocommit屬性為0,默認為1。

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

如果不這樣做,會有什么結果呢?

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

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

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

通常COMMIT或ROLLBACK語句執行時才完成一個事務,但是有些DDL語句等會隱式觸發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

我們再來舉個例子看下。

復制代碼 代碼如下:
$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執行出錯了,$sql1照樣會執行的。為什么呢?

因為rename在執行的時候,mysql默認會先執行commit,再執行rename。

注意

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

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

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

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

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

php技術PHP mysql與mysqli事務使用說明 分享,轉載需保留來源!

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

主站蜘蛛池模板: 国产色婷亚洲99精品AV在线 | 亚洲永久精品AV在线观看 | 美女逼逼毛茸茸 | 2021全国精品卡一卡二 | 亚洲精品AV一区午夜福利 | 国产婷婷一区二区在线观看 | 边摸边吃奶玩乳尖视频 | av狼新人开放注册区 | 俄罗斯爱爱 | 亚洲色综合中文字幕在线 | 国产又色又爽又刺激在线播放 | 欧美xx69| 亚洲AV久久无码精品蜜桃 | 羞羞一区二区三区四区片 | 亲胸摸下面激烈免费网站 | 国产精品夜夜春夜夜爽久久小 | 婷婷四房播客五月天 | 日本三级按摩推拿按摩 | 国产亚洲精品影视在线 | 爱穿丝袜的麻麻3d漫画免费 | 亚洲综合久久一本伊伊区 | 在线视频 国产 日韩 欧美 | 年轻的母亲4线在线观看完整 | 女人爽到高潮嗷嗷叫视频 | 国产午夜精品一区二区三区 | 亚洲精品久久久无码 | 无人影院在线播放视频 | 影音先锋av天堂 | 快播看av| 青草影院内射中出高潮-百度 | 亚洲欧美日韩高清中文在线 | 4hu四虎免费影院www | ZZoo兽2皇| 精品国产成人AV在线看 | 挺进老师的紧窄小肉六电影完整版 | 99热在线观看精品 | 视频专区亚洲欧美日韩 | 天堂岛www | 性生片30分钟 | 手机在线播放成人亚洲影院电影 | 在线免费观看毛片 |