数据库事务虽然概念简单,使用也不复杂,但是很重要,我感觉有必要在文档中提一下。
数据库事务就是当你需要一次性完成多条update和delete数据库操作时,为了保证数据能一次性正确完成,Mysql提供的一种机制。使用过程是先开启一个事务Db::startTrans();
,然后编写SQL语句进行update和delete,如果都能预处理成功,你可以进行Db::commit();
提交事务,数据库才会真实处理所有的SQL语句,如果你发现中间有异常或者错误,你可以进行Db::rollback();
回滚并停止事务。
五颗星!!!!!
如果你一次性需要处理多条update和delete的数据库操作,请一定要使用数据库事务机制。这样,才能保证数据的正确性。否则任何一种意外情况都将产生数据的错误。举个例子,Laytp中管理员管理,添加管理员的操作,需要同时添加管理员表lt_admin_user
和管理员与角色关系表lt_admin_role_user
。如果在这个操作中,没有使用事务,当程序把管理员表lt_admin_user
添加完毕了,突然网络不稳定,程序与数据库连接中断了,管理员与角色关系表lt_admin_role_user
的数据就不会添加成功。如果使用了事务,只要没有执行Db::commit();
,之前执行了的SQL语句仅仅只是预处理执行,Mysql中是不会仅看到管理员表lt_admin_user
添加成功而管理员与角色关系表lt_admin_role_user
添加不成功这种情况的。
Laytp中推荐使用数据库事务的代码如下:
Db::startTrans();
try {
$res1 = Db::table('table_name')->delete(1);
if(!$res1) throw new \Exception('错误提示文字1');
$res2 = Db::table('table_name')->delete(2);
if(!$res2) throw new \Exception('错误提示文字2');
Db::commit();
return $this->success('操作成功');
} catch (\Exception $e) {
Db::rollback();
return $this->exceptionError($e);
}