nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例
本篇文章主要介绍了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模块实现事务处理实例相关推荐
- 认识mysql总结_从根上理解Mysql - 读后个人总结1-搜云库
初识 MySQL 通信介绍 MySQL 也是典型的 C / S 模型,分为客户端及服务端,服务端一般部署在远端服务器中,也可以部署至本地,然后客户端跟服务端通信则可以使用依赖网络的 TCP 长连接或 ...
- 宝塔mysql优化_宝塔面板下实现MySQL性能优化处理
在PHP+MYSQL架构网站运行过程中,往往会遇到各种性能问题影响,如MySQL.PHP.CPU.磁盘IO.缓存等,其中MySQL瓶颈就是最常见也最难解决的一种影响网站性能的因素:通常,我们会使用re ...
- linux mysql怎么样_最强Linux和Mysql面试题套餐,让你的面试无懈可击!
引言: 大家好,我是一菲,在软件测试当中linux 操作系统和Mysql数据库的内容是十分的知识同时也是十分重要的.所以一菲这两天通过查阅资料等其他方式为大家梳理了liunx和Mysql面试题大礼包, ...
- 树莓派3 mysql端口_树莓派3 之 安装Mysql服务
需求 在树莓派上 安装Mysql 服务,并开启远程访问 步骤 安装 mysql server$ sudo apt-get install mysql-server 我以为中间会让我提示输入 数据库ro ...
- 如何用c 控制mysql数据库_用C语言操作MySQL数据库
函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换autocommit模式 ...
- mysql运营_为线上运营Mysql数据库设置从库
一.为mysql运营主库添加一个repl 账号 [root@zabbix_server ~]# mysql -uroot -p -S /var/lib/mysql/mysql.sock Enter p ...
- php mysql 迁移_将phpstudy中的mysql迁移至Linux教程
项目目的 将原来windows环境中使用phpstudy搭建的mysql 5.5.53 中的数据迁移至新主机Linux环境中 环境情况 新主机 系统平台: CentOS release 7.4 (Fi ...
- win7 mysql 密码_笔记本win7系统下mysql忘记密码的最佳解决方法
MySQL是一个关系型数据库管理系统,在笔记本win7系统下编程的时候就需要用到MySQL数据库,不过有时候一段时间没用的话,可能会忘记数据库的登录密码了,当忘记密码就无法进入mysql,要如何解决呢 ...
- mysql 分享_雷林鹏分享:MySQL 连接
使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [root@host]# my ...
最新文章
- linux输出指定数量脉冲,ESM335x Linux输出脉冲计数
- windows建立PPPoE服务器
- what should we learn from Magnetite?
- python基础内容_python基础-python介绍
- bzoj2751[HAOI2012]容易题(easy)
- JDK8 Stream 操作
- celery实现任务统一收集、分发执行
- 二维码QR码的“疯狂”广告
- openSUSE 跨版本升级
- powerquery加载pdf_老板让我汇总PDF文件,我不会,同事用Excel两分钟就搞定
- mysql官网社区免费版下载方法
- 旅游信息管理后台(SSM后台管理系统)
- 什么是大数据挖掘技术
- Duet Display用一根数据线将iPad变身扩展显示器
- QThread 的使用
- 中国科学院大学2019年数学分析考研试题
- typora 编辑器菜单栏不见了:打开了一体化模式
- python实现扫描二维码图片,返回相关信息
- 高德地图API的一些使用心得
- mmdetection安装教程 | 踩坑总结
热门文章
- android广播注册源码,android 广播源码简要分析-注册
- gis根据行政区计算栅格数据计算_亚马逊fba运费根据什么计算?怎么计算?
- oracle11gR版本GI中新增,Oracle11g新特性MemberKillEscalation简介
- Spring Boot EasyUI edatagrid 扩展
- php 伪静态 获取当前页面路径_织梦移动适配PHP获取当前页面URL地址方法
- 没有bug队——加贝——Python 练习实例 21,22
- 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
- 做一个关于我和她微信聊天记录的爱心词云图
- 完全自主可控的安全关键领域仿真测试软件SkyEye可替代SCADE
- java spring mvc api_SpringMVC实现REST API