首页 > 数据库技术 > 详细

mysql 事务处理

时间:2014-08-08 20:56:46      阅读:405      评论:0      收藏:0      [点我收藏+]

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);,不然会把后面的 查询也当做事务来处理,不提交时就无法执行

mysql 事务处理,布布扣,bubuko.com

mysql 事务处理

原文:http://www.cnblogs.com/lin3615/p/3899990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!