mysql 事务处理(表的引擎必须是 innodb / BDB)
主要是两种两法:推荐用第一种
1.用 begin,rollback,commit 来实现
begin 开始一个事务
rollback 事务回滚
commit 事务提交
2.直接用 set 来改变 mysql的自动提交模式,系统默认是自动提交的
set autocommit = 0; 禁止自动提交
set autocommit = 1; 开启自动提交
用第一种方式可这样:
<?php
/*
表信息 innodb(id,text)
*/
require_once(‘conn.php‘); // 数据库连接信息
$flag = 1; // 标识是完成提交还是回滚 1.提交完成 0.失败回滚
//因为是自动提交的(默认),所以要想用事务,就必须手动开始事务,并手动提交
//开启事务
mysql_query("BEGIN"); // 或者 mysql_query("START TRANSACTION");
$sql1= "insert into innodb values(‘‘, ‘xxx‘)";
$sql2 = "insert into innodb values(‘‘, ‘iiii‘)";
$sql3 = "insert into innodb values(‘‘, ‘eee‘ee‘)";
if(!mysql_query($sql1)){$flag = 0;}
if(!mysql_query($sql2)){$flag = 0;}
if(!mysql_query($sql3)){$flag = 0;}
if($flag)
{
mysql_query("commit");
echo "commit";
}else
{
mysql_query("rollback");
echo "rollback";
}
// 因为 $sql3有误,所以是无法插入以上数据的
//结束这事务
mysql_query("END");
----------------
第二种方式可用:
<?php
require_once(‘conn.php‘); // 数据库连接信息
// 相当于开启了事务,禁止自动提交
mysql_query("set autocommit=0", $conn);
$flag = 1; // 标识是完成提交还是回滚 1.提交完成 0.失败回滚
/*
表信息 innodb(id,text)
*/
$sql1= "insert into innodb values(‘‘, ‘xxx‘)";
$sql2 = "insert into innodb values(‘‘, ‘iiii‘)";
$sql3 = "insert into innodb values(‘‘, ‘eee‘ee‘)";
if(!mysql_query($sql1)){$flag = 0;}
if(!mysql_query($sql2)){$flag = 0;}
if(!mysql_query($sql3)){$flag = 0;}
if($flag)
{
mysql_query("commit");
echo "commit";
}else
{
mysql_query("rollback");
echo "rollback";
}
mysql_query("END", $conn); // 结束事务
mysql_query("set autocommit=1", $conn); // 还原自动提交,取消事务
// 因为 $sql3有误,所以是无法插入以上数据的
/*一定在提交或者回滚后,要调用 mysql_query("END", $conn);和mysql_query("set autocommit=1", $conn);,不然会把后面的 查询也当做事务来处理,不提交时就无法执行
原文:http://www.cnblogs.com/lin3615/p/3899990.html