1.安装相关包npminstallaccess-dbnpminstalldotenv然后在项目入口文件前面引入require('dotenv').config()(如app.js)新建一个.env文件,添加mysql配置。MYSQL_HOST=localhost//requiredMYSQL_USER=rootMYSQL_PASSWORD=123456MYSQL_PORT=3306MYSQL_DATABASE=//requireddatabasename2,transactionandlocktransaction()事务处理的异步函数let{run,begin,rollback,commit,locks}=awaitmysql.transaction()需要的参数类型说明beginFunction为事务启动函数commitFunction为事务提交函数rollbackFunction无回滚事务函数runFunction为执行sql语句函数简称S锁,属于行锁)exclusive_locks'forupdate'独占锁ExclusiveLocks(简称X锁,属于行锁)begin()是事务开启函数,数据库操作在begin()功能。()执行每条sql语句并返回结果。当执行过程中报错,或者执行的sql结果不满足条件时,可以使用rollback()函数进行回滚操作。当执行没有问题的时候,记得提交事务,也就是执行commit()函数。如果您需要秒杀事件这样的业务。然后,还需要对数据进行加锁,直接在返回的SQL语句后面加相应类型的锁即可。示例代码:import{mysql}from'access-db'/**mysqltransactionsandlocks*/let{run,begin,rollback,commit,locks}=awaitmysql.transaction()awaitbegin(async()=>{try{//当需要加锁的时候,直接在返回的sql语句后面加相应的锁,注意把awaitletsql1=(awaitmysql.get('user',10,'sentence'))+locks.exclusive_locksletsql2=awaitmysql.update('user',10,{money:['incr',-3]},'sentence')letsql3=awaitmysql.update('user',12,{money:['incr',3]},'sentence')letres1=awaitrun(sql1)if(res1.data.money<3){returnawaitrollback()//回滚事务}awaitrun(sql2)awaitrun(sql3)awaitcommit()//提交事务}catch(err){awaitrollback()//回滚事务thrownewError(err)}})
