技术文摘
NodeJs 使用 Mysql 模块实现事务处理的实例
2025-01-15 04:10:32 小编
NodeJs 使用 Mysql 模块实现事务处理的实例
在 NodeJs 开发中,使用 Mysql 模块进行数据库操作时,事务处理是确保数据一致性和完整性的重要手段。本文将通过实例展示如何在 NodeJs 中利用 Mysql 模块实现事务处理。
确保已经安装了 mysql 模块。可以通过 npm install mysql 命令进行安装。
以下是一个简单的示例代码,用于演示事务处理的基本流程:
const mysql = require('mysql');
// 创建数据库连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test',
connectionLimit: 10
});
// 开始事务
function startTransaction() {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
reject(err);
} else {
connection.beginTransaction((beginErr) => {
if (beginErr) {
connection.release();
reject(beginErr);
} else {
resolve(connection);
}
});
}
});
});
}
// 提交事务
function commitTransaction(connection) {
return new Promise((resolve, reject) => {
connection.commit((commitErr) => {
if (commitErr) {
connection.rollback(() => {
connection.release();
reject(commitErr);
});
} else {
connection.release();
resolve();
}
});
});
}
// 执行事务操作
async function executeTransaction() {
try {
const connection = await startTransaction();
const sql1 = 'INSERT INTO users (name, email) VALUES (?,?)';
const values1 = ['John Doe', 'john@example.com'];
await new Promise((resolve, reject) => {
connection.query(sql1, values1, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
const sql2 = 'UPDATE users SET email =? WHERE name =?';
const values2 = ['newjohn@example.com', 'John Doe'];
await new Promise((resolve, reject) => {
connection.query(sql2, values2, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
await commitTransaction(connection);
console.log('事务执行成功');
} catch (error) {
console.error('事务执行失败:', error);
}
}
executeTransaction();
在上述代码中,首先创建了一个数据库连接池。startTransaction 函数用于开始一个新的事务并返回一个数据库连接。commitTransaction 函数负责提交事务并释放连接。executeTransaction 函数是事务操作的核心,在其中依次执行多个数据库操作,并在所有操作成功后提交事务。如果任何一个操作出错,事务将回滚。
通过这样的方式,在 NodeJs 中利用 Mysql 模块可以轻松实现可靠的事务处理,保障数据的一致性和完整性,为项目的稳定运行提供有力支持。
- Go 语言构建快速灵活的自动 HTTPS Web 服务器
- 如何构建通用灵活的 JavaScript 插件系统?看完就懂!
- 并发编程中的三个关键问题剖析
- C# 中 int.TryParse 的详细用法
- Go 中停止程序的方法
- Python 的 Faker 库:助力软件开发高效生成各类虚拟数据
- C# 中 == 与 Equals 的差异
- 代码之外:工程师的成长进阶之道
- Rust 所有权的内涵
- 2024 年前端技术趋势最新动态集萃
- AS Const 的五种使用技巧,你了解多少?
- 深入解析 C#文件压缩:SharpZipLib 与 DotNetZip 实用代码全汇总
- 编写高性能 Java 代码的方法
- 携手探索小程序开发新路径
- 你是否了解 Kotlin 的扩展特性?