本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

依赖模块:

1. mysqlnpm install mysql --save

2. asyncnpm install async --save

(ps: async模块可换成其它Promise模块如bluebird、q等)

因为Node.js的mysql模块本身对于事务的封装过于简单,而且直接使用会有很严重callback hell,故我们封装了两个方法,一个用来初始化sql & params,一个用来执行事务。

初始化sql & params:function _getNewSqlParamEntity(sql, params, callback) {

if (callback) {

return callback(null, {

sql: sql,

params: params

});

}

return {

sql: sql,

params: params

};

}

如果你要执行多条sql语句,则需要:var sqlParamsEntity = [];

var sql1 = "insert table set a=?, b=? where 1=1";

var param1 = {a:1, b:2};

sqlParamsEntity.push(_getNewSqlParamEntity(sql1, param1));

var sql2 = "update ...";

sqlParamsEntity.push(_getNewSqlParamEntity(sql1, []));

//...更多要事务执行的sql

然后我在我自己的dbHelper.js里封装了execTrans的函数,用来执行事务var mysql = require('mysql');

var async = require("async");

module.exports = {

execTrans: execTrans,

}

var pool = mysql.createPool({

host: "mysql host",

user: "mysql login user",

password: "mysql login pwd",

database: "target db name",

connectionLimit: 10,

port: "mysql db port",

waitForConnections: false

});

function execTrans(sqlparamsEntities, callback) {

pool.getConnection(function (err, connection) {

if (err) {

return callback(err, null);

}

connection.beginTransaction(function (err) {

if (err) {

return callback(err, null);

}

console.log("开始执行transaction,共执行" + sqlparamsEntities.length + "条数据");

var funcAry = [];

sqlparamsEntities.forEach(function (sql_param) {

var temp = function (cb) {

var sql = sql_param.sql;

var param = sql_param.params;

connection.query(sql, param, function (tErr, rows, fields) {

if (tErr) {

connection.rollback(function () {

console.log("事务失败," + sql_param + ",ERROR:" + tErr);

throw tErr;

});

} else {

return cb(null, 'ok');

}

})

};

funcAry.push(temp);

});

async.series(funcAry, function (err, result) {

console.log("transaction error: " + err);

if (err) {

connection.rollback(function (err) {

console.log("transaction error: " + err);

connection.release();

return callback(err, null);

});

} else {

connection.commit(function (err, info) {

console.log("transaction info: " + JSON.stringify(info));

if (err) {

console.log("执行事务失败," + err);

connection.rollback(function (err) {

console.log("transaction error: " + err);

connection.release();

return callback(err, null);

});

} else {

connection.release();

return callback(null, info);

}

})

}

})

});

});

}

这样就可以执行事务了:execTrans(sqlParamsEntity, function(err, info){

if(err){

console.error("事务执行失败");

}else{

console.log("done.");

}

})

nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例相关推荐

  1. 认识mysql总结_从根上理解Mysql - 读后个人总结1-搜云库

    初识 MySQL 通信介绍 MySQL 也是典型的 C / S 模型,分为客户端及服务端,服务端一般部署在远端服务器中,也可以部署至本地,然后客户端跟服务端通信则可以使用依赖网络的 TCP 长连接或 ...

  2. 宝塔mysql优化_宝塔面板下实现MySQL性能优化处理

    在PHP+MYSQL架构网站运行过程中,往往会遇到各种性能问题影响,如MySQL.PHP.CPU.磁盘IO.缓存等,其中MySQL瓶颈就是最常见也最难解决的一种影响网站性能的因素:通常,我们会使用re ...

  3. linux mysql怎么样_最强Linux和Mysql面试题套餐,让你的面试无懈可击!

    引言: 大家好,我是一菲,在软件测试当中linux 操作系统和Mysql数据库的内容是十分的知识同时也是十分重要的.所以一菲这两天通过查阅资料等其他方式为大家梳理了liunx和Mysql面试题大礼包, ...

  4. 树莓派3 mysql端口_树莓派3 之 安装Mysql服务

    需求 在树莓派上 安装Mysql 服务,并开启远程访问 步骤 安装 mysql server$ sudo apt-get install mysql-server 我以为中间会让我提示输入 数据库ro ...

  5. 如何用c 控制mysql数据库_用C语言操作MySQL数据库

    函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换autocommit模式 ...

  6. mysql运营_为线上运营Mysql数据库设置从库

    一.为mysql运营主库添加一个repl 账号 [root@zabbix_server ~]# mysql -uroot -p -S /var/lib/mysql/mysql.sock Enter p ...

  7. php mysql 迁移_将phpstudy中的mysql迁移至Linux教程

    项目目的 将原来windows环境中使用phpstudy搭建的mysql 5.5.53 中的数据迁移至新主机Linux环境中 环境情况 新主机 系统平台: CentOS release 7.4 (Fi ...

  8. win7 mysql 密码_笔记本win7系统下mysql忘记密码的最佳解决方法

    MySQL是一个关系型数据库管理系统,在笔记本win7系统下编程的时候就需要用到MySQL数据库,不过有时候一段时间没用的话,可能会忘记数据库的登录密码了,当忘记密码就无法进入mysql,要如何解决呢 ...

  9. mysql 分享_雷林鹏分享:MySQL 连接

    使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [root@host]# my ...

最新文章

  1. linux输出指定数量脉冲,ESM335x Linux输出脉冲计数
  2. windows建立PPPoE服务器
  3. what should we learn from Magnetite?
  4. python基础内容_python基础-python介绍
  5. bzoj2751[HAOI2012]容易题(easy)
  6. JDK8 Stream 操作
  7. celery实现任务统一收集、分发执行
  8. 二维码QR码的“疯狂”广告
  9. openSUSE 跨版本升级
  10. powerquery加载pdf_老板让我汇总PDF文件,我不会,同事用Excel两分钟就搞定
  11. mysql官网社区免费版下载方法
  12. 旅游信息管理后台(SSM后台管理系统)
  13. 什么是大数据挖掘技术
  14. Duet Display用一根数据线将iPad变身扩展显示器
  15. QThread 的使用
  16. 中国科学院大学2019年数学分析考研试题
  17. typora 编辑器菜单栏不见了:打开了一体化模式
  18. python实现扫描二维码图片,返回相关信息
  19. 高德地图API的一些使用心得
  20. mmdetection安装教程 | 踩坑总结

热门文章

  1. android广播注册源码,android 广播源码简要分析-注册
  2. gis根据行政区计算栅格数据计算_亚马逊fba运费根据什么计算?怎么计算?
  3. oracle11gR版本GI中新增,Oracle11g新特性MemberKillEscalation简介
  4. Spring Boot EasyUI edatagrid 扩展
  5. php 伪静态 获取当前页面路径_织梦移动适配PHP获取当前页面URL地址方法
  6. 没有bug队——加贝——Python 练习实例 21,22
  7. 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
  8. 做一个关于我和她微信聊天记录的爱心词云图
  9. 完全自主可控的安全关键领域仿真测试软件SkyEye可替代SCADE
  10. java spring mvc api_SpringMVC实现REST API