一、事务处理(transaction processing)主要目的是用来维护数据库的完整性。
二、特别是在对多表/多条记录进行批操作的时候,基本上都离不开事务,可以防止各种错误而中断等等。
三、用法(我以TP5.0为例):
1.启动事务:Db::startTrans();
2.提交事务:Db::commit();
3.事务回滚:Db::rollback();
事物处理注意事项:
1、遇到事物不执行,检查代码好像没错,我想最好去检查一下数据库可能没有将引擎类型MyISAM改为InnoDB,这是很容易忽略的地方。
2、遇到事物执行部分或不执行,最好去检查一下有没有将select()查询加入事物回滚,这是也是很容易忽略的地方。
下例我以TP5.0举例:
$id = input('post.ids');
$other = input('post.result_other');
$row = $this->model->where("id = $id")->find();
$data = ['result_other' => $other, 'status' => '-2'];
// 启动事务
Db::startTrans();
try {
Db::name('score_order')->where("id",$id)->update($data);
//实例化用户模型
$score_log = new \app\common\model\User();
//写入积分日志
$score_log->score($row['score'], $row['uid'], '订单驳回返还积分');
Db::commit();
$this->success(__('order faild tip success'));
} catch (Exception $e) {
// 回滚事务
Db::rollback();
die($e->getMessage());
}