NodeJs mysql 开启事务

如题;node后台使用mysql数据库,并使用事务来管理数据库操作。

这里主要讲一个事务的封装并写了一个INSERT 插入操作。

code:

基础code:

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
}

相关操作步骤已经在注释中写明,本人实测有效。如需使用需加上自己的数据库配置及相关表明等动态配置。

posted @ 2019-01-04 19:16  诗和远方-ysk  阅读(5626)  评论(0编辑  收藏  举报