mysql事务处理 begin_mysql 事务处理

mysql 事务处理(表的引擎必须是 innodb / BDB)

主要是两种两法:推荐用第一种

1.用 begin,rollback,commit 来实现

begin 开始一个事务

rollback 事务回滚

commit 事务提交

2.直接用 set  来改变 mysql的自动提交模式,系统默认是自动提交的

set autocommit = 0; 禁止自动提交

set autocommit = 1;  开启自动提交

用第一种方式可这样:

/*

表信息 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");

----------------

第二种方式可用:

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

你可能感兴趣的:(mysql事务处理,begin)