nodejs mysql 事务封装

mysql.js

const mysql = require("mysql2");

class MysqlModel {

constructor() {

this.mysqlConfig = config.mysql;

}

/**

* 实例化mysql

*/

mysqlInstance() {

const poolCluster = mysql.createPoolCluster({

removeNodeErrorCount: 1, // Remove the node immediately when connection fails.

defaultSelector: "RR" //RR,RANDOM,ORDER

});

const mysqlNodes = this.mysqlConfig;

for (let node in mysqlNodes) {

poolCluster.add(`${node}`, mysqlNodes[`${node}`]);

}

return new Promise((resolve, reject) => {

poolCluster.getConnection(function (err, connection) {

if (err) {

reject(err);

} else {

resolve([

connection,

poolCluster

]);

}

})

})

}

/**

* 获取mysql数据库连接

*/

async getConnection() {

return await this.mysqlInstance();

}

}

async function mysqlDBUtil() {

try {

const db = new MysqlModel();

const [conn, pool] = await db.getConnection();

log(46, ‘mysql连接成功‘)

/**

* 回滚事务

*/

const rollback = async function () {

conn.rollback();

log(‘mysql事务发生回滚......rollback‘)

}

/**

* 数据库操作

* @param {} sql

* @param {*} options

*/

const query = function (sql, options) {

return new Promise((resolve, reject) => {

conn.query(sql, options, function (error, results, fields) {

if (error) {

reject(error);

} else {

resolve(results);

}

})

})

}

/**

*提交事务

*/

const commit = function () {

return new Promise((resolve, reject) => {

conn.commit(function (err) {

if (err) {

reject(err);

}

log(‘mysql事务提交......commit‘)

});

})

}

/**

* 关闭连接池,mysql2的包自己不会释放

*/

const close = async function () {

pool.end();

log(‘mysql连接池关闭.....close‘);

}

return {

rollback,

commit,

close,

query

}

} catch (error) {

throw new Error(error);

}

}

module.exports = mysqlDBUtil;

//调用

const db = await mysqlUtil();

try {

const sql = ` SELECT * FROM user `;

const result = await db.query(sql);

return result;

}catch (error) {

await db.rollback();

}finally{

awit db.close();

}

原文地址:https://www.cnblogs.com/qiyc/p/12148009.html

时间: 2024-10-11 09:30:45

nodejs mysql 事务封装的相关文章

sailsjs nodejs mysql 事务操作回滚

async.auto({   transaction: function(next){     User.query('BEGIN', next);   },   user: ['transaction', function(next) {     User.findOne(req.param('id')).exec(next);   }],   // other queries in the transaction   // ...}, function(err, results) {   i

nodejs mysql 创建连接池

用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Conan), 程序员

数据库-mysql事务

MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行. 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(A

MySQL 事务

MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行. 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(A

MySQL事务详解

事务:Transaction 多个sql语句,要么同时都执行,要么同时都不执行 事务就是一组原子性的(select)查询语句,也即将多个查询当作一个独立的工作单元 ACID测试:能够满足ACID测试就表示其支持事务,或兼容事务 A:Atomicity,原子性,都执行或者都不执行 C:Consistency,一致性,从一个一致性状态转到另外一个一致性状态 I:Isolaction,隔离性.一个事务的所有修改操作在提交前对其他事务是不可见的 D: Durability, 持久性,一旦事务得到提交,其

Mysql事务&字符集

Mysql事务 Innodb存储引擎的中的事务完全服务ACID: 原子性.2.一致性.3.隔离性.4.持久性 理解上和oracle类似. 事务隔离级别 1.Read uncommitted 读未提交: 2.Read committed 读已提交: 3.Repeatable read 可重复读,类似oracle利用undo的闪回查询: 4.Serializable 串行读,很少用. 隔离级别的修改: 通过set命令: 通过修改配置文件,启动数据库的默认隔离级别-mysqld Mysql字符集 My

Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868880 后进行的第二部分,请各位读者在看这篇博客之前先浏览上一篇,因为这里面有部分代码会沿用到上一部分的抓取结果. 好,现在开始正式的抓取图片的讲解 首先,我们先来看看代码: var page =require('webpage').create(); var address='http://pro

MYSQL事务及存储引擎对比

Innodb支持事务,而myisam不支持事务. 事务的定义: 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据的更新从一个一致性状态变更为另一个一致性状态,这时有必要引入事务的概念. Mysql提供了多种引擎支持Innodb和BDB.Innodb存储引擎事务主要通过UNDO日志和REDO日志实现,Myisam和memory引擎则不支持事务.下图分别给出三种mysql引擎的区别和特性: Myisam存储引擎:由于该引擎不支持事务.也不支持外键,所以

十、mysql事务的简介

1. myisam跟memory支持表级别锁定 BDB 页级锁定 Innodb 行级锁定 2.表锁(不是表嫂哈) lock table read //只读表锁,也就是说执行了这个锁后,锁内的操作只能为读操作 select * from ..... unlock tables; lock table write //读写表锁,可读可写 insert ... update ... select ... delete ... unlock tables; PS::表被锁定后,其他连接的操作将被挂起,直