如题;node后台使用mysql数据库,并使用事务来管理数据库操做。node
这里主要讲一个事务的封装并写了一个INSERT 插入操做。mysql
code:sql
db.config.js数据库
const mysql = require('mysql') const pool = mysql.createPool({ connectionLimit: 20, //链接池链接数 host: 'localhost', //数据库地址,这里用的是本地 database: 'xxxx', //数据库名称 user: 'xxxxx', // username password: '*****' // password }) //返回一个Promise连接 const connectHandle = () => new Promise((resolve, reject) => { pool.getConnection((err, connection) => { if(err) { console.error('连接错误:' + err.stack + '\n' + '连接ID:' + connection.threadId) reject(err) } else { resolve(connection) } }) }) module.exports = connectHandle
const connectHandler = require('./db.config') //引入上面所讲的数据库基础配置 const insertHandler = async (vals) => { const connection = await connectHandler() // 获得连接 const tablename = 'xxxxx' //动态table(表)名称 //开启事务 connection.beginTransaction( err => { if(err) { return '开启事务失败' } else { //执行INSERT插入操做 connection.query(`INSERT INTO ${tablename} SET ?`, vals, (e, rows, fields) => { if(e) { return connection.rollback(() => { console.log('插入失败数据回滚') }) } else { connection.commit((error) => { if(error) { console.log('事务提交失败') } }) connection.release() // 释放连接 return {rows, success: true} // 返回数据库操做结果这里数据格式可根据我的或团队规范来定制 } }) } }) } module.exports = { insertHandler }
相关操做步骤已经在注释中写明,本人实测有效。如需使用需加上本身的数据库配置及相关代表等动态配置。async