相关文章推荐
痴情的可乐  ·  仅次于十大!深圳第二高级中学2月18日校园开 ...·  1 年前    · 
彷徨的热水瓶  ·  欧拉芭蕾猫 - 知乎·  2 年前    · 
八块腹肌的葡萄酒  ·  【纯干货】linux调度策略(最透彻的一篇! ...·  2 年前    · 
大力的烤面包  ·  黄道医馆(我有古法秘术)-第2话·铁鸡斗蜈蚣·  2 年前    · 
文雅的香槟  ·  喜羊羊与灰太狼里面有哪些隐喻? - 知乎·  2 年前    · 
Code  ›  Node.js mysql 事务和锁的写法 | 微信开放社区
https://developers.weixin.qq.com/community/develop/article/doc/000e484bdc81f8969c6cfdf5a53c13
兴奋的消防车
2 年前

交流专区
服务市场
微信学堂
文档
小程序
  • 常用主页

    小程序

    小游戏

    企业微信

    微信支付

  • 服务市场
    微信学堂
    文档
登录
评论

置顶 Node.js mysql 事务和锁的写法 精选 热门

wzj 2021-07-08
568 浏览
0 评论

Node.js mysql 事务和锁的写法

一、安装相关包

npm install access-db
npm install dotenv

然后在项目入口文件(如app.js)的最前面引入 require('dotenv').config()
新建 .env 文件,并添加mysql配置。

  MYSQL_HOST=localhost   // 必填
  MYSQL_USER=root
  MYSQL_PASSWORD=123456
  MYSQL_PORT=3306
  MYSQL_DATABASE=    // 必填  数据库名

二、事务和锁 transaction()

事务处理的异步函数

let { run, begin, rollback, commit, locks } = await mysql.transaction()

begin()为事务开启函数,在begin()函数里面执行数据库操作,通过run()来执行各个sql语句,并返回结果。当执行报错,或执行的sql结果不满足条件时,可以用rollback()函数进行回滚操作。当执行没问题时,记得提交事务,即执行commit()函数。

如果需要类似秒杀活动那种业务。那么,还需要对数据进行加锁,直接在返回sql语句后面,加上locks对应的类型即可。

示例代码:

import {mysql} from 'access-db'
/** mysql 的事务 和 锁 */
let {run, begin, rollback, commit, locks} = await mysql.transaction()
await begin(async () => {
  try{
    // 需要加锁的时候,就直接在返回的sql语句后面加上相应的锁,注意要将await括起来
    let sql1 = (await mysql.get('user', 10, 'sentence')) + locks.exclusive_locks
    let sql2 = await mysql.update('user', 10, {money: ['incr', -3]}, 'sentence')
    let sql3 = await mysql.update('user', 12, {money: ['incr', 3]}, 'sentence')
    let res1 = await run(sql1)
    if(res1.data.money < 3){
      return await rollback()  //回滚事务
    await run(sql2)
    await run(sql3)
    await commit()  //提交事务
  }catch(err){
    await rollback()  //回滚事务
    throw new Error(err)
 
推荐文章
痴情的可乐  ·  仅次于十大!深圳第二高级中学2月18日校园开放日!_招生_计划_控制线
1 年前
彷徨的热水瓶  ·  欧拉芭蕾猫 - 知乎
2 年前
八块腹肌的葡萄酒  ·  【纯干货】linux调度策略(最透彻的一篇!) - 知乎
2 年前
大力的烤面包  ·  黄道医馆(我有古法秘术)-第2话·铁鸡斗蜈蚣
2 年前
文雅的香槟  ·  喜羊羊与灰太狼里面有哪些隐喻? - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号