设为首页 加入收藏

TOP

MySQL详解(13)------------事务(四)
2015-11-21 01:54:50 来源: 作者: 【 】 浏览:1
Tags:MySQL 详解 ------------ 事务
CREATE TABLE `dbtest`( -> id int(4) -> ) TYPE=INNODB; Query OK, 0 rows affected, 1 warning (0.05 sec) mysql> select * from dbtest -> ; Empty set (0.01 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into dbtest values(5); Query OK, 1 row affected (0.00 sec) mysql> insert into dbtest value(6); Query OK, 1 row affected (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> select * from dbtest; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.00 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into dbtest values(7); Query OK, 1 row affected (0.00 sec) mysql> rollback; Query OK, 0 rows affected (0.00 sec) mysql> select * from dbtest; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.00 sec)

mysql> mysql事务处理php代码实现事务的处理可以通过PHP预定义类mysqli的以下方法实现。
autocommit(boolean):该方法用于限定查询结果是否自动提交,如果该方法的参数为true则自动提交,如果参数为false则关闭自动提交。MySQL数据库默认为自动提交。
rollback():利用mysqli类中的该方法可以实现事务的回滚。
commit():利用该方法可以实现提交所有查询。
?

include_once("conn.php");

$id=$_GET[id];
$conn->autocommit(false);
if(!$conn->query("delete from tb_sco where id='".$id."'"))
{
$conn->rollback();
}
if(!$conn->query("delete from tb_stu where id='".$id."'"))
{
$conn->rollback();
}
$conn->commit();
$conn->autocommit(true);
echo "ok"
?>


列二

require('connectDB.php'); //建立数据库连接
mssql_query("BEGIN TRANSACTION DEPS02_DEL"); //开始事务
$delete_dep_sql="DELETE FROM TBLDEPARTMENT WHERE DEPTID='{$_GET[deptid]}'";
// echo $delete_dep_sql."
";
mssql_query($delete_dep_sql); //操作数据库
// var_dump($del_result);
$delete_result = mssql_query("select @@ROWCOUNT as id");
$delete_info = mssql_fetch_array($delete_result);
$delete_rows = $delete_info[0];
// var_dump($delete_rows);
mssql_free_result($delete_result);
echo "<script language=java script>";
if(true){ //判断是否回滚提交
mssql_query("COMMIT TRANSACTION DEPS02_DEL"); //提交事务
echo "alert('delete success!');";
}else{
mssql_query("ROLLBACK TRANSACTION DEPS02_DEL"); //回滚事务
echo "alert('delete faile!');";
}
echo "";mssql_close(); ?>

例3MySQL的事务处理在处理实际问题中有着广泛且重要的应用,最常见的应用如银行转账业务、电子商务支付业务等等。但是,值得注意的是,MySQL的事务处理功能在MYSIAM存储引擎中是不支持的,在InnoDB存储引擎中是支持的。现在上传一段代码,作为引导认识MySQL事务处理的开始,简单的实例,但融汇思想,相信会有很大的帮助。
?

$conn=mysql_connect('localhost','root','yourpassword')or die(mysql_error());
mysql_select_db('transaction',$conn);
mysql_query('set names utf8');

//创建事务
mysql_query('START TRANSACTION') or die(mysql_error());
$sqlA="update A set account=account-1";
if(!mysql_query($sqlA)){
    mysql_query('ROLLBACK') or exit(mysql_error());//判断当执行失败时回滚
  exit();
}
$sqlB="update B set account=account+1";
if(!mysql_query($sqlB)){
    mysql_query('ROLLBACK') or exit(mysql_error());//判断当执行失败时回滚
  exit();
}
mysql_query('COMMIT')or die(mysql_error());//执行事务
mysql_close($conn);
?>

以上代码可以作为模拟银行转账业务的事务流程。以表A、B分别表示两个已在银行开户的账户,当账户A执行转出1元给账户B的操作时,如果操作执行失败,转出将会回滚至原始状态,不继续向下执行动作。反之,如果操作执行成功,则账户B可用余额将增加1元,否则事务回滚至原始状态。

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一则线上MySql连接异常的排查过程 下一篇MySQL连续数统计

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: