//準備的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:支持事務。性能