mysql事务处理
有一张银行账号表
create table account
(id int primary key,
balance float);
现在有一段php程序, 要完成 把 1号 10 元钱,转到 2号账号上
事务
基本:事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用以保证数据的一致性
现在我们使用事务来完成上面的代码
代码:
1 <?php 2 3 $mysqli=new MySQLi("localhost","root","hsp123","test"); 4 if($mysqli->connect_error){ 5 6 die($mysqli->connect_error); 7 } 8 9 //将提交设为false[事务一旦提交就没有机会回滚 10 $mysqli->autocommit(false); 11 //-> savepoint a;会把但前情况记录 12 $sql1="update account set balance=balance-2 where id=1"; 13 $sql2="update account2 set balance=balance+2 where id=2"; 14 $b1=$mysqli->query($sql1) ; 15 $b2=$mysqli->query($sql2) ; 16 17 if(!$b1||!$b2){ 18 echo "失败,回滚".$mysqli->error; 19 //回滚! 20 $mysqli->rollback(); 21 }else{ 22 //提交[一旦提交没有机会回滚 23 $mysqli->commit(); 24 } 25 $mysqli->close(); 26 //显示控制台 27 ?>
☞ 在mysql控制台可以使用事务来操作,具体步骤如下
1. 开启一个事务
start transaction
2. 做保存点
savepoint 保存点名称
3. 操作....
4. 可以回滚,可以提交
4.1 如果没有问题提交
commit
4.2 如果你觉得有问题,就回滚
rollback to 保存点.
事务的acid特性
原子性,一致性,持久性,隔离性.