一,
// 开启事务
Db::startTrans();
// 删除数据 33
$a=Db::table("user")->delete(33);
// 删除数据 34
$b=Db::table("user")->delete(34);
// 判断条件
if ($a && $b) {
// 提交事务
Db::commit();
return true;
}else{
// 回滚事务
Db::rollback();
return false;
}
二 。
model 层执行的数据操作 返回 TRUE
和 false
controller 判断 成功或者失败
// 启动事务
Db::startTrans();
try{
// 执行循环插入数据之前先清空 数据表中当前角色的权限; $info['id'] 角色
$deleteRes = Db::name('role_node')->where('rid',$info['id'])->delete();
if(!$deleteRes){
Db::rollback();
return false;
}
// 循环插入新的 角色权限
for ($i = 0; $i < count($info['role']); $i++){
Db::name('role_node')->insert(['rid' => $info['id'], 'nid' => $info['role'][$i]]);
}
// 更新成功 提交事务
Db::commit();
return true;
} catch (\Exception $e) {
// 更新失败 回滚事务
Db::rollback();
return false;
}
1、事务举例
张三 银行卡 1000, 李四 银行卡 500, 张三给李四转账200
1) 银行 先扣除 张三的200
2) 银行 将200 给了李四
mysql事务 要求 数据库的引擎必须 InnoDB
**使用**
-------------------------------------------------
1、自动控制事务
Db::transaction(function(){
// 删除第一条数据
Db::table("user")->delete(40);
// 删除第二条数据
Db::table("user")->delete(41);
});
-------------------------------------------------
2、手动控制事务 (***)
// 开启事务
Db::startTrans();
// 事务
try{
// 删除数据id 31
$a=Db::table("user")->delete(31);
// 判断是否删除成功
if (!$a) {
Db::rollback();
throw new \Exception("删除id 31 数据没有成功");
}
// 删除不存在的数据 id 32
$b=Db::table("user")->delete(32);
// 判断是否删除成功
if (!$b) {
Db::rollback();
throw new \Exception("删除id 32 数据没有成功");
}
// 执行提交操作
Db::commit();
}catch(\Exception $e){
// 回滚事务
Db::rollback();
// 获取提示信息
dump($e->getMessage());
}
------------------------------------------------
3.
// 开启事务
Db::startTrans();
// 删除数据 33
$a=Db::table("user")->delete(33);
// 删除数据 34
$b=Db::table("user")->delete(34);
// 判断条件
if ($a && $b) {
// 提交事务
Db::commit();
}else{
// 回滚事务
Db::rollback();
}