如題;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