nodejs连接mysql数据库支持事物封装-mysql模块
2016-07-26 15:03
645 查看
-- 安装模块
npm install mysql --连接数据库模块 ,基本封装看这里:/article/11869683.htmlnpm install async --异步流程控制模块 ,async模块介绍:/article/11869021.html
-- 封装代码
mysql.js/* nodejs连接mysql数据库支持事物封装 2016年7月26日14:47:06 QQ: 452076103 意外金喜 */ var db = {}; var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 10, host : 'localhost', user : 'root', password : '123456', database : 'nodejs' }); //获取连接 db.getConnection = function(callback){ pool.getConnection(function(err, connection) { if (err) { callback(null); return; } callback(connection); }); } module.exports = db;
-- 测试-无错误
var db = require('./mysql.js'); var async = require('async'); db.getConnection(function(connection){ connection.beginTransaction(function(err) { if (err) { console.log(err); return; } var task1 = function(callback){ connection.query(`insert into user (name) values('a')`, function(err, result) { if (err) { console.log(err); callback(err,null); return; } console.log('第一次插入成功!'); callback(null,result); }) } var task2 = function(callback){ connection.query(`insert into user (name) values('b')`, function(err, result) { if (err) { console.log(err); callback(err,null); return; } console.log('第二次插入成功!'); callback(null,result); }) } var task3 = function(callback){ connection.query(`insert into user (name) values('c')`, function(err, result) { if (err) { console.log(err); callback(err,null); return; } console.log('第三次插入成功!'); callback(null,result); }) } async.series([task1, task2, task3],function(err,result){ if (err) { console.log(err); //回滚 connection.rollback(function() { console.log('出现错误,回滚!'); //释放资源 connection.release(); }); return; } //提交 connection.commit(function(err) { if (err) { console.log(err); return; } console.log('成功,提交!'); //释放资源 connection.release(); }); }) }); })
运行结果:
数据库:
-- 发生错误
1.sql语句错误
比如把第三条sql语句user改为user1.数据库还是之前插入的那3条数据,没有新增.
2.非sql语句错误
比如在async.series回调函数的第一行加入代码 : var err = 1;人为添加错误
数据库依然没有新增数据,证明这个事物控制还是很靠谱的,之前写过nodejs连接sqlserver数据库支持事物的封装,
和sqlserver不同的地方是 :
sqlserver的事物在sql语句错误的时候会自动回滚,mysql的事物都需要手动回滚.
非sql错误的时候都一样,都必须手动回滚.
同样从begin方法开始,所有的程序错误都要手动处理,如果发生错误,而又没处理到,是不会回滚的.
相关文章推荐
- mysql无法优化的sql案例
- mysql 分表修改语句
- MySQL开启针对mysql的所有操作log
- mysql分表分区方案实测:MyISAM引擎分表 or mysql表分区
- Mysql 5.7.* 免安装版配置
- MySQL主从配置【转载】
- [转]MySQL去除重复数据
- Keepalive实现mysql双主热备
- Mysql中文乱码问题完美解决方案
- Windows mysql备份
- 将sqllite3数据库迁移到mysql
- mysql 主从原理
- MySQL使用入门
- MySQL 学习总结-基本语句
- MySQL 数据备份与还原
- MySQL中优化sql语句查询常用的30种方法
- 安装MySQL
- MySQL的多实例
- MySQL的基本使用
- Mac下安装Mysql