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 模块可以轻松实现可靠的事务处理,保障数据的一致性和完整性,为项目的稳定运行提供有力支持。

TAGS: 实例 NodeJS 事务处理 Mysql 模块

欢迎使用万千站长工具!

Welcome to www.zzTool.com