mysql2,用于与 MySQL 数据库进行交互

时间:2025-09-23 15:05

mysql2 是一个流行的 Node.js 客户端,用于与 MySQL 数据库进行交互。它是 mysql 模块的改进版本,提供了更好的性能、Promise 支持和更多功能。

主要特点

  1. 性能优化:比传统的 mysql 模块更快,尤其是在处理大量数据时。
  2. Promise 支持:原生支持 Promise API,便于使用 async/await 语法。
  3. 预处理语句:支持参数化查询,防止 SQL 注入。
  4. 二进制协议:使用 MySQL 二进制协议,效率更高。
  5. 流式处理:支持大结果集的流式处理,降低内存占用。

基本使用步骤

1. 安装

bash
npm install mysql2
 

2. 建立连接并执行查询

javascript
运行
const mysql = require('mysql2/promise'); // 引入 Promise 版本

// 连接数据库
async function connectAndQuery() {
  let connection;
  try {
    // 创建连接
    connection = await mysql.createConnection({
      host: 'localhost',
      user: 'your_username',
      password: 'your_password',
      database: 'your_database'
    });

    // 执行查询
    const [rows] = await connection.execute('SELECT * FROM users WHERE id = ?', [1]);
    console.log('查询结果:', rows);

  } catch (err) {
    console.error('错误:', err);
  } finally {
    // 关闭连接
    if (connection) {
      await connection.end();
    }
  }
}

// 调用函数
connectAndQuery();
 

关键功能示例

1. 预处理语句(防止 SQL 注入)

javascript
运行
// 安全的参数化查询
const [rows] = await pool.execute(
  'INSERT INTO users (name, age) VALUES (?, ?)',
  ['Alice', 30] // 参数数组
);
 

2. 事务处理

javascript
运行
async function transferMoney() {
  const connection = await pool.getConnection();
  try {
    await connection.beginTransaction();
    
    // 执行事务操作
    await connection.execute('UPDATE accounts SET balance = balance - 100 WHERE id = 1');
    await connection.execute('UPDATE accounts SET balance = balance + 100 WHERE id = 2');
    
    // 提交事务
    await connection.commit();
  } catch (err) {
    // 回滚事务
    await connection.rollback();
    throw err;
  } finally {
    connection.release(); // 释放连接回池
  }
}
 

3. 流式处理大结果集

javascript
运行
const stream = pool.query('SELECT * FROM large_table').stream();

stream.on('data', (row) => {
  // 逐行处理数据,不占用大量内存
  console.log(row);
});

stream.on('end', () => {
  console.log('处理完成');
});
 

与传统 mysql 模块的区别

  • mysql2 原生支持 Promise,而 mysql 需要额外包装(如 util.promisify)。
  • mysql2 性能更好,尤其是在高并发场景。
  • mysql2 提供更完善的错误处理和类型转换。

总结

mysql2 是 Node.js 开发中连接 MySQL 的优选工具,尤其适合需要高性能和现代异步语法(async/await)的项目。通过连接池管理连接、使用参数化查询,可以构建安全且高效的数据库交互逻辑。
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
企业级数据架构:MySQL递归查询在组织权限树中的高级应用实践
企业级MySQL索引优化实战:高并发场景下的索引设计与调优
企业级MySQL时间管理实践:高并发场景下的性能优化与时区解决方案