php 中的 mysqli事務處理

//準備的sql語句,數據user表中username是惟一索引,innodb
	$sql="INSERT INTO `user`(`username`,`password`,`name`,`age`,`price`,`time`) VALUES ('admin',md5('admin'),'Mr.Zhang',34,10,111111111)";
	$sql2="INSERT INTO `user`(`username`,`password`,`name`,`age`,`price`,`time`) VALUES ('admin',md5('admin'),'Mr.Zhang',34,10,111111111)";
	
	$mysqli=new mysqli("localhost","root","root","ci");
	$mysqli->query("set names utf8");
	
	$mysqli->autocommit(false);//關閉自動提交,同時開始事務
	
	//執行sql
	$mysqli->query($sql);
	$mysqli->query($sql2);

	if(!$mysqli->errno){
		 $mysqli->commit();//若是成功,則提交
		echo "insert  success";
	}else{
		echo "insert error code:".$mysqli->errno;
		$mysqli->rollback();//不成功,則回滾
	}
	
	$mysqli->autocommit(true);
	$mysqli->close();

通常來講,事務都具有四個特徵:ACID。php

    A:Atomic (原子性)組成事務處理的語句造成了一個邏輯單元,好比上面的sql 和sql2 兩個語句執行是不能分割的,不能只執行sql或者sql2mysql

    C:Consistent(一致性),在事務處理執行先後,數據庫是一致的,好比銀行 A帳戶轉錢給B帳戶,A的錢減小那麼B的錢必須增長相對於的金額,要麼都不變。sql

    I:Isolated(隔離性),一個事務處理對另外一個事務處理沒有影響.好比說,銀行轉賬過程當中,在轉賬事務沒有提交以前,另外一個轉賬事務只能處於等待狀態。數據庫

    D:Durable(持續性,事務處理的效果可以被永久保存下來。反過來講,事務應當可以承受全部的失敗,包括服務器、進程、通訊以及媒體失敗等等。好比:銀行轉賬過程當中,轉賬後賬戶的狀態要能被保存下來。服務器


ps:對事務主要是理解,只有理解了纔是本身的東西。併發

這裏要注意下:MyISAM:不支持事務,用於只讀程序提升性能(若是查詢比較多,而沒有事務最佳之選);InnoDB:支持ACID事務、行級鎖、併發;Berkeley DB:支持事務。性能

相關文章
相關標籤/搜索