一、事务的应用场景
转账业务:小李转账1000给小王,小王账户加1000,小李账户减1000
1)小李账户减1000
2)小王账户加1000
二、tp5实现事务的几种方法
1.手动开启事务
1.// 开启事务
Db::startTrans();
// 事务
try{
// 减掉小李账户1000元
$a=Db::table("user")->where($where1)->update($update1);
// 判断是否更新成功
if (!$a) {
throw new \Exception("扣除小李账户1000元失败");
}
// 小王账户加1000元
$b=Db::table("user")->where($where2)->update($update2);
// 判断是否删除成功
if (!$b) {
throw new \Exception("增加小王账户1000元失败");
}
// 执行提交操作
Db::commit();
}catch(\Exception $e){
// 回滚事务
Db::rollback();
// 获取提示信息
dump($e->getMessage());
}
------------------------------------------------
2.// 开启事务
Db::startTrans();
// 减掉小李账户1000元
$a=Db::table("user")->where($where1)->update($update1);
// 小王账户加1000元
$b=Db::table("user")->where($where2)->update($update2);
// 判断条件
if ($a && $b) {
// 提交事务
Db::commit();
}else{
// 回滚事务
Db::rollback();
}
2、自动开启
-------------------------------------------------
自动控制事务
Db::transaction(function(){
// 减掉小李账户1000元
$a=Db::table("user")->where($where1)->update($update1);
// 小王账户加1000元
$b=Db::table("user")->where($where2)->update($update2);
});
-------------------------------------------------