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(不能) 一旦提交之后就不能回滚了
事务的几大特性
原子性,一致性,持久性,隔离性.