[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
}
~~~
- 概述
- 起步
- 跨域配置
- 路徑別名
- 路由
- api版本控制
- 錯誤和異常
- 全局異常處理
- 數據庫
- 創建遷移文件
- sequelize數據類型
- 配置
- 新增
- 查詢
- 條件查詢
- 模糊查詢
- 排序查詢
- 聚合查詢
- 分組查詢
- 分頁查詢
- 修改
- 刪除
- 獲取器
- 修改器
- 靜態屬性
- 字段驗證
- 外鍵約束
- 關聯模型
- 一對一
- 一對多
- 左外連接
- 多對多
- 字段顯示隱藏
- 事務
- 字段自增
- 驗證層
- egg-validate
- indicative驗證器
- egg-validate-plus
- betterValidate
- 校驗規則
- 中間件
- 安全
- 數據加密
- 單向加密
- 示例代碼
- 封裝egg加密
- 上傳
- path模塊
- 單文件上傳
- 多文件上傳
- 按照日期存儲
- 工具函數
- egg常用工具函數
- 緩存
- 配置緩存插件
- 設置緩存
- 獲取緩存
- 刪除緩存
- 消息隊列
- rabbitMQ
- 安裝
- 簡單隊列
- 工作隊列
- 工作隊列(dispach分發)
- 消息應答和持久化
- redis
- 數據類型
- 字符串類型(String)
- 哈希類型(Hash)
- 列表(List)
- 無序集合(Set)
- 可排序集合(Zset)
- 郵件系統
- nodeMailer
- 第三方模塊
- 生成隨機數
- JWT
- JWT鑒權
- 生成Token
- 短信服務
- 阿里大魚短信驗證碼
- 發送短信邏輯
- 阿里短信Node類