nodejs mysql2 事务处理函数, 完整代码
时间: 2024-10-16 10:19:09 浏览: 25
NodeJs使用Mysql模块实现事务处理实例
在Node.js中,使用`mysql2`库进行MySQL数据库的事务处理,你可以创建一个函数来进行封装,以便在需要时能方便地开启和提交、回滚事务。以下是使用`mysql2`的一个示例,展示了如何处理事务的基本流程:
```javascript
const mysql = require('mysql2/promise');
// 创建数据库连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'username',
password: 'password',
database: 'your_database'
});
async function transactalFunction(transactionCallback) {
try {
// 获取连接并开启事务
const connection = await pool.getConnection();
connection.beginTransaction();
// 调用传递进来的回调函数,这里假设回调会做具体的SQL操作
await transactionCallback(connection);
// 提交事务
await connection.commit();
console.log("Transaction committed successfully");
} catch (error) {
// 发生错误时,回滚事务
if (connection && !connection.destroyed) {
await connection.rollback();
console.error("Transaction rolled back due to error:", error);
}
throw error;
} finally {
// 关闭连接
if (connection && !connection.destroyed) {
await connection.end();
}
}
}
// 示例:向表中插入数据的事务处理函数
async function insertData(connection) {
const [rowsAffected] = await connection.query(
"INSERT INTO your_table (column1, column2, ...) VALUES (?, ?, ...)", // 替换字段
[/* 数据列表 */]
);
return rowsAffected;
}
// 使用事务处理函数
transactalFunction(async (conn) => {
await insertData(conn); // 假设在这里插入数据
});
```
在这个例子中,`transactalFunction`接收一个内部可以自定义的回调函数,该回调会在一个事务上下文中执行。如果回调内的所有操作都成功完成,事务会被提交;如果有任何错误,事务会被自动回滚。
阅读全文