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
}

相關操作步驟已經在注釋中寫明,本人實測有效。如需使用需加上自己的數據庫配置及相關表明等動態配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM