首先MYSQL中只有INNODB和BDB類型的數據表才能支持事務處理,其餘的類型是不支持的.先查看錶的數據庫類型是否支持事務php
在mysql中事務演示:html
SELECT * FROM t_user2;mysql
INSERT INTO t_user2(NAME,pwd,sex,age,birthday) VALUES('張三','123','1',18,'1990-6-6');sql
-- 開啓事務
START TRANSACTION;
-- 設置回滾斷點
SAVEPOINT a;
DELETE FROM t_user2;
SAVEPOINT b;
INSERT INTO t_user2(NAME,pwd,sex,age,birthday) VALUES('張三','123','1',18,'1990-6-6');數據庫
-- 回滾
ROLLBACK TO b; ui
ROLLBACK TO a;htm
在PHP中mysqli擴展庫,事務演示:事務
<?phputf-8
/**
* mysqli事務處理
*/
header("content-type:text/html;charset=utf-8");get
//mysqli事務
require("./DBHelper.class.php");
$dbhelper = DBHelper::getInstance();
$mysqli = new MYSQLI("wk.php","root","root","db_text");
!($mysqli->connect_error) or die("連接失敗".$mysqli->connect_error);
//將提交設爲false,事務一旦提交就沒機會回滾
$mysqli->autocommit(false);
$sql1 = "update t_user2 set name = '李四' where id = 1";
$sql2 = "update t_user2 set nam = '王五' where id = 2";
$b1 = $mysqli->query($sql1);
$b2 = $mysqli->query($sql2);
if(!$b1 || !$b2){
echo "執行失敗,回滾".$mysqli->error;
//回滾
$mysqli->rollback();
}else{
//提交
$mysqli->commit();
}
$mysqli->close();?>