韩顺平php mysqli事务控制(案例)

create table account(
id int primary key,
balance float
);

现在有一段php程序, 要完成 把 1号 10 元钱,转到 2号账号上

<?php

$mysqli= new MYSQLi("localhost","root","hsp123","test");
if(!$mysqli){
	die("连接失败".mysqli_connect_error($mysql));

}

//将提交设为false  事务一旦提交就没有机会回滚了;
$mysql->autocommint(false);
//->savepoint a 做了一个保存点,会把当前情况记录
$sql1="update account set balance=balance-2 where id=1";
$sql2="update account set balance=balance+2 where id=2";

$b1=$mysqli->query($sql1);
$b2=$mysqli->query($sql2);


if(!$b1||!$b2){
	echo "失败,回滚".$mysqli->error;
 //回滚
 $mysqli->rollback();

}else{

//提交 一旦提交就没有机会回滚了
$mysqli->commint();

}

$mysqli->close();

?>

在mysql控制台可以使用事务来操作,具体步骤如下
在mysql控制台也可以用事务操作,具体步骤如下
1.开启一个事务
start transaction
2.做保存点
savepoint a;
3.操作
4.可以回滚也可以提交
如果没有问题就提交
commit
如果你觉得没有问题,就回滚
rollback to 保存点

start transaction;
delete from user1;
select*from user1;
rollback;
select*from user1;
删除的回来了,就回滚了

start transaction;
savepoint a;
delete from user1 where id=2;
select*from user1;
savepoint b;
delete from user1 where id=3;
select*from user1;
rollback to b;
rollback to a;回到a b的保存点就被冲掉 a在b的前面
commit ;
rollback to a(不能) 一旦提交之后就不能回滚了

在这里插入图片描述
事务的几大特性
原子性,一致性,持久性,隔离性.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43345480/article/details/89763705