mysql自动转账_mysql事务处理(银行转账实例)

事务的作用主要是在服务器发生错误或者崩溃的情况下确保数据的一致性。事务是一个或者一系列的查询,这些查询要么全部执行要么执行要么全部不执行。例如,银行转账需要两个过程来完成,首先需从某个账户扣除一定金额,之后在另个账户中增加相同的金额。如果这两个过程不同时,从第一个账户中扣除金额后没来得及增加第二个账户的金额就发生停电或者服务器崩溃,这将给用户和银行造成很大的损失。如果采用事务处理上述过程,即使出现上述事故也不会给用户带来损失。一个事务被永久的写入到数据库中称事务提交,将状态重置到事务开始之前的状态称为事务回滚

本节通过具体实例来介绍PHP是如何处理MYSQL事务的。PHP处理MySql事务是通过PHP中的预定义类mysqli来完成的,该类中与事务处理的相关方法如下:

autocommit():该方法的参数是false或者true,false表示禁止自动提交查询,true表示自动提交查询。

rollback():该方法的作用是当发生意外时,自动回滚到事务开始之前的状态。

commit():该方法的作用是提交事务。

此处将通过银行转账的过程来介绍事务处理的方式。前面已经介绍过银行转账主要有两个过程来完成,也就是需要执行两个查询,在这里用tb_money代表金额表,用money代表金额字段,用user_out和user_in来分别表示汇款人和收款人。

代码如下:$conn = new mysqli("localhost","root","","user")or die("连接失败");

$conn->query("set names utf-8",MYSQLI_USE_RESULT);

$conn->autocommit(false);

$sql1 = "update tb_money set money= money-1000 where id=1";//一个账户减少1000

$result1 = $conn->query($sql1, MYSQLI_USE_RESULT);

if (!$result1){

$conn->rollback();//回滚

}

$sql2 = "update tb_money set money=money+1000 where id=2";//一个账户增加1000

$result2 = $conn->query($sql2, MYSQLI_USE_RESULT);

if (!$result2){

$conn->rollback();//回滚

}

$conn->commit();//提交事务

$conn->autocommit(true);//自动提交为真

$conn->close();//数据库连接关闭

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值