MySQL基础教程(三十七)MySQL之Node.js 连接与使用:Node.js与MySQL的终极指,连接池、异步与实战秘籍

在当今数据驱动的开发环境中,Node.js与MySQL的组合已成为全栈开发的黄金标准。本文将深入解析如何高效连接和使用MySQL,并附有实用示例。

连接池:性能优化的核心

创建连接是昂贵的操作。连接池通过复用连接显著提升性能:

const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'your_password',
  database: 'test_db',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

异步操作:避免阻塞Event Loop

使用async/await确保非阻塞IO:

async function getUser(id) {
  const [rows] = await pool.execute(
    'SELECT * FROM users WHERE id = ?',
    [id]
  );
  return rows[0];
}

完整CRUD示例

// 创建
async function createUser(user) {
  const [result] = await pool.execute(
    'INSERT INTO users (name, email) VALUES (?, ?)',
    [user.name, user.email]
  );
  return result.insertId;
}

// 查询
async function getUsers() {
  const [rows] = await pool.execute('SELECT * FROM users');
  return rows;
}

// 更新
async function updateUser(id, updates) {
  const [result] = await pool.execute(
    'UPDATE users SET name = ?, email = ? WHERE id = ?',
    [updates.name, updates.email, id]
  );
  return result.affectedRows;
}

// 删除
async function deleteUser(id) {
  const [result] = await pool.execute(
    'DELETE FROM users WHERE id = ?',
    [id]
  );
  return result.affectedRows;
}

错误处理与事务管理

async function transferFunds(fromId, toId, amount) {
  const connection = await pool.getConnection();
  try {
    await connection.beginTransaction();
    
    await connection.execute(
      'UPDATE accounts SET balance = balance - ? WHERE id = ?',
      [amount, fromId]
    );
    
    await connection.execute(
      'UPDATE accounts SET balance = balance + ? WHERE id = ?',
      [amount, toId]
    );
    
    await connection.commit();
  } catch (error) {
    await connection.rollback();
    throw error;
  } finally {
    connection.release();
  }
}

结论

通过连接池管理和异步操作,Node.js与MySQL的组合能够处理高并发场景。关键点是始终使用参数化查询防止SQL注入,合理配置连接池参数,以及妥善处理事务错误。

这样的实现确保了应用的可扩展性和稳定性,是现代Web开发的必备技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值