到现在为止,我们已经在前面的教程里面介绍了大部分 Jsnpp里面使用数据库的方法,事务操作也是数据库操作中的一个经常可能会用到实现。我们这一篇就来介绍怎么在Jsnpp框架的数据库语句里面实现事务操作。
为了说明更加清楚起见,我们先来看一个没有使用事务的数据库语句,看下面的代码:
$this->app->db->table('users')->where('id', 3)->data('name', 'mike')->update()->table('users')->where('id', 2)->delete()->finish();
上面的代码应该很熟悉了,我们对数据库表“users”连续进行了两个操作,一个是更新操作,另一个是删除记录操作。当然了,如果您还有其他数据库操作,那么您可以加上更多的“->table”开头的语句链。
我们来详细解释一下上面代码的意思:首先是使用update把表users里面id为3的记录的name值修改为“mike”,接着是把表users里面的id为2的记录删除掉。
这里涉及两个数据库操作,一般情况下,我们使用上面的语句就可以很好地完成任务了。但是,如果我们要求这两个数据库操作必须一致,也就是说要么全执行,要么全不执行,该怎么做?
这就需要用到事务,看下面的代码:
$this->app->db->beginTransaction()->table('users')->where('id', 3)->data('name', 'mike')->update()->table('users')->where('id', 2)->delete()->endTransaction()->finish();
上面的代码是使用事务的代码,我们可以仔细对照一下两处代码,上面这行代码执行的结果跟前面的代码是一样的,区别仅仅是使用了事务。
通过比较后,我们发现上面的代码比前面代码多了“->beginTransaction()”和“->endTransaction()”,这两者之间的数据库代码就可以按事务方式来执行。“->beginTransaction()”表示事务开始,“->endTransaction()”表示事务结束。
现在您应该已经明白了,Jsnpp里面要实现事务是相当简单的,只需要把数据库的事务执行语句放到“->beginTransaction()”和“->endTransaction()”之间就可以了。
当然,要实现事务操作,数据库首先要支持,例如用常用的MySQL来说,需要使用InnoDB引擎。