美文网首页
Node.js mysql 事务和锁的写法

Node.js mysql 事务和锁的写法

作者: Fairy_zhao | 来源:发表于2021-07-08 14:29 被阅读0次

一、安装相关包

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 Function 事务开始函数
commit Function 事务提交函数
rollback Function 回滚事务函数
run Function 执行sql语句函数
locks Object 上锁类型

locks详情

field value 说明
shared_locks ' lock in share mode' 共享锁 Shared Locks (简称 S 锁,属于行锁)
exclusive_locks ' for update' 排他锁 Exclusive Locks(简称 X 锁,属于行锁)

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)
  }
})

相关文章

  • Node.js mysql 事务和锁的写法

    一、安装相关包 npm install access-dbnpm install dotenv 然后在项目入口文件...

  • mysql的锁+事务,联合的地方

    mysql的锁+事务,联合的地方 全文是对《Mysql 技术内幕 Innodb》中,锁和事务两个章节,自己能看懂或...

  • 数据库事务,锁

    事务 事务特点ACID 理解ACID 以银行转账为例 MySQL锁 锁是MySQL在服务器层和存储引擎层的并发控制...

  • 高性能Mysql笔记

    一、Mysql架构与历史 1、架构图 2、锁 表锁 行级锁 3、事务 死锁 Mysql中的事务 1

  • MySQL事务和锁

    事务特性 原子性(Atomicity [ˌætəˈmɪsəti]):事务是不可分割的最小单元一致性(Consist...

  • Mysql事务和锁

    1.什么是数据库的事务? 数据库事务的典型场景? 订单,转账 支付,电商等全部成功/全部不成功。金融 什么是事务?...

  • Mysql事务和锁

    ACID 其实AC是一个概念,就是要么一起执行,要么都不执行,只是看问题的指标不同而已,一个侧重过程,一个侧重结果...

  • MySQL相关(一)——— 事务和锁

    事务的隔离级别和锁机制 【1】InnoDB 事务隔离级别和锁 【2】脏读、不可重复读、幻读 mysql 相关 常用...

  • MySQL数据库高级(七)——事务和锁

    MySQL数据库高级(七)——事务和锁 一、事务简介 1、事务简介 事务(Transaction) 是指作为单个逻...

  • mysql 的 事务 和 锁

    mysql事务select 只是进行了隔离,保证数据的一致性,并没有加锁,如果要加锁可以用for update。 ...

网友评论

      本文标题:Node.js mysql 事务和锁的写法

      本文链接:https://www.haomeiwen.com/subject/fqctpltx.html