事务(Transaction)在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

当需要实现多个表均完成才可进行下一步的操作时,可利用事务的方法处理数据,实现事务中包括的诸操作要么都做,要么都不做的功能。

在ThinkPHP中,事务的基本操作方法如下:

示例1:

// 实例化M()方法
$Model = M();
// 开启事务
$Model->startTrans();
// 处理数据第一条测试数据
$dataG = array(
    'nHomeScore' => $nhomescore,
    'nGuestScore' => $nguestscore
);
$whereG['gameId'] = $gameId;
$updateGame = $Model
    ->table('game_list')
    ->where($whereG)
    ->data($dataG)
    ->save();
// 处理第二条数据测试数据
$dataM = array(
    'game_result' => $game_result
);
$whereM['game_id'] = $gameId;
$updateQuiz = $Model
    ->table('quiz_game_list')
    ->where($whereM)
    ->data($dataM)
    ->save();
// 判断两条数据是否均处理成功
if ($updateGame===false || $updateQuiz===false){
    $this->_returnJson['error_code'] = '100000';
    $this->_returnJson['error'] = '修改失败';
    $this->ajaxReturn($this->_returnJson);
    // 未全部成功则进行事务的回滚
    $Model->rollback();
}
// 均已成功则提交全部
$Model->commit();
// 返给前端处理结果
$this->_returnJson['error_code'] = '0';
$this->ajaxReturn($this->_returnJson);

示例2:

// 或者是M();
$m=D('YourModel');
$m2=D('YouModel2');
// 在第一个模型里启用就可以了,或者第二个也行
$m->startTrans();
$result=$m->where('删除条件')->delete();
$result2=m2->where('删除条件')->delete();
if($result && $result2){
  // 成功则提交
$m->commit();
}else{
  // 不成功,则回滚
$m->rollback();
}

Q.E.D.