🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### Egg.js中使用sequelize事务 对数据库的操作很多时候需要同时进行几个操作,比如需要同时改动几张表的数据,或者对同一张表中不同行(row)或列(column)做不同操作,比较典型的例子就是用户转账问题(A账户向B账号汇钱): 1 从A账号中把余额读出来。 2 对A账号做减法操作。 3 把结果写回A账号中。 4 从B账号中把余额读出来。 5 对B账号做加法操作。 6 把结果写回B账号中。 为了数据的一致性,这6件事,要么操作全部成功,要么全部失败回滚。这就是事务的一个特性:原子性。关于事务的四大特性(ACID)这里不做深究。 项目使用的是 Egg+egg-sequelize 模式,查阅了一下 sequelize 的[官方文档](http://sequelize.readthedocs.io/en/v3/docs/transactions/),使用方法如下: ~~~ let transaction; try { // 开启事务 transaction = await this.ctx.model.transaction(); await this.service.xxx.xxx(parms, transaction); await this.service.xxx.xxx(parms1, parms2, transaction); await transaction.commit(); return true } catch (e) { await transaction.rollback(); return false } ~~~