技术文摘
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 模块可以轻松实现可靠的事务处理,保障数据的一致性和完整性,为项目的稳定运行提供有力支持。
- 在用户权限管理里怎样实现数据源的动态选择
- flex布局下body标签内元素如何垂直居中
- HTML引入外部JS文件后 如何确保JS文件加载完再执行方法
- HTML多行文本悬停下划线效果的实现方法
- Flex布局导致列表符号消失的原因
- 网页安全:URL 中密码信息的隐藏方法
- 相同代码在浏览器、Git 命令行和 Node.js 中运行结果不同的原因
- 网页滚动时内容怎样实现逐渐显示
- 怎样安全地向后台传递隐藏参数
- 怎样实现像 Figma 那样禁用触摸板缩放
- 一机双屏协同下点击主屏按钮让副屏弹出对话框并同步修改的实现方法
- 用-webkit-filter设背景图片透明度时文字也透明咋办
- 父元素 `pointer-events: none` 时如何让子元素点击事件生效
- HTML 中 JS 文件顺序执行机制:怎样保证 JS 文件加载完毕后执行方法
- 输入框怎样根据内容自动伸缩与换行