什么时候用事务处理?
如果你一次要修改数据库多个地方的数据,而要保证没处都要修改成功,如果有一处修改不成功,就会撤销其他的改动,以保证数据的完整性,比如我要把小明的用户余额200块钱转给小张,那么理应小张的余额增加200,小明的余额减掉200,那如果因为某些原因小张的余额没有增加而小明的余额减掉了,这个就不正常了。
代码实例:
try {
Db::startTrans();
//将数据1存入表1,并获取ID:
$re['t1'] = Db::name('table1')
->insertGetId([
'content1' => $content1
]);
//将数据2写入表2
$re['t2'] = Db::name('table2')
->insert([
'id' => $re['t1'],
'content2' => $content2
]);
//任意一个表写入失败都会抛出异常:
if (in_array('0', $re)) {
throw new Exception('意不意外?');
}
Db::commit();
return $this->success('完美一击!');
} catch (\Exception $e) {
//如获取到异常信息,对所有表的删、改、写操作,都会回滚至操作前的状态:
Db::rollback();
return $this->error($e->getMessage());
}