当有多个sql语句要执行且要避免有一个地方出错而影响之前事务执行时,就要用到mysql事务处理功能了。
getMysqlDatabasesArray(option,connection){
const errs = {
message : "参数有误",
code : 400,
data : []
};
return new Promise((resolve,reject)=>{
//启动事务
connection.beginTransaction(function (err) {
//如果报错,取消执行
if (err) {
connection.release();
reject(errs);
}
let funcAry = [];
option.forEach(function (sql_param) {
if(typeof sql_param.value === "undefined" || typeof sql_param.value === undefined){
sql_param.value = null;
}
let querySql = {
sql : sql_param.sql,
values : sql_param.value
};
//定义多个sql语句
let temp = function(cb){
connection.query(querySql, function (tErr, rows, fields) {
return cb(tErr,rows);
})
};
//存入一个数组
funcAry.push(temp);
});
//异步执行
async.series(funcAry, function (err, result) {
if (err) {
//如果出错,回滚之前步骤
connection.rollback(function (errv) {
connection.release();
reject(errs);
});
} else {
//commit提交
connection.commit(function (err, info) {
if (err) {
connection.rollback(function (err) {
connection.release();
reject(errs);
});
} else {
connection.release();
let cbDatas = {
message : "操作成功",
code : 200,
data : info
};
resolve(cbDatas);
}
})
}
})
});
})
}
事务处理会用到async中间件,可以执行多个sql操作。