【node.js MySQL】node.js 如何连接 MySQL?

在 Node.js 中连接 MySQL 数据库,主要有以下几种常见方案,从底层驱动到高级抽象层不等。以下是当前(2025 年)主流且活跃的选项,按流行度和推荐度排序:

1. mysql2(最推荐的底层驱动)

  • 描述:这是目前最流行、最活跃的 MySQL 客户端库,纯 JavaScript 实现,性能优秀,支持 Prepared Statements、连接池、压缩、SSL 等高级特性。

  • 优势

    • 原生支持 Promise 和 async/await(通过 mysql2/promise.promise() 方法)。
    • 比旧的 mysql 更快、更现代。
    • API 与旧 mysql 高度兼容,便于迁移。
  • 安装npm install mysql2

  • 基本示例

    javascript 复制代码
    const mysql = require('mysql2/promise'); // Promise 版本
    
    async function main() {
      const connection = await mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'password',
        database: 'testdb'
      });
    
      const [rows] = await connection.execute('SELECT * FROM users');
      console.log(rows);
    
      await connection.end();
    }
    
    main();
  • 适用场景:大多数项目,直接操作 SQL 查询时首选。

2. mysql(经典但较旧的驱动)

  • 描述:最早的 Node.js MySQL 驱动,纯 JS 实现,稳定但维护较少(最后大版本更新已多年)。
  • 优势:简单、成熟、多くの遗留项目仍在使用。
  • 缺点 :无原生 Promise 支持(需额外用 promise-mysql 包装),性能不如 mysql2。
  • 安装npm install mysql
  • 适用场景:旧项目维护,或不需要高级特性的简单应用。

3. mariadb(MariaDB 官方驱动)

  • 描述:MariaDB 提供的 Node.js 驱动,与 mysql2 API 类似,完全兼容 MySQL。
  • 优势:性能与 mysql2 相当,支持 Promise,针对 MariaDB 优化更好(MariaDB 是 MySQL 的 fork)。
  • 安装npm install mariadb
  • 适用场景:如果你使用 MariaDB 数据库,而不是纯 MySQL。

4. @mysql/xdevapi(官方 MySQL Connector/Node.js)

  • 描述:Oracle/MySQL 官方提供的异步驱动,支持 X DevAPI(文档存储 + 关系模型)。
  • 优势:原生 Promise,支持 NoSQL 风格的文档操作(Collection)和传统表操作。
  • 缺点:API 与传统 SQL 驱动不同,更适合 MySQL 8+ 的 X Protocol。
  • 安装npm install @mysql/xdevapi
  • 适用场景:需要官方支持或混合文档/关系模型的项目。

5. ORM 或查询构建器(高级抽象层)

如果不想直接写 SQL,可以用这些库,它们底层通常基于 mysql2:

  • Prisma :现代 ORM,支持类型安全(TypeScript 友好)、迁移、自动生成客户端。最推荐的新项目。
    • 安装:npm install prisma @prisma/client
  • Sequelize :成熟的 Promise-based ORM,支持迁移、关联等。
    • 安装:npm install sequelize mysql2
  • TypeORM :TypeScript 优先,支持装饰器风格。
    • 安装:npm install typeorm mysql2
  • Knex.js :查询构建器(非 ORM),灵活生成 SQL,支持多种数据库。
    • 安装:npm install knex mysql2

适用场景:中大型项目,需要模型管理、迁移、验证等功能。

推荐总结

  • 新项目 :直接用 mysql2 + Promise/async-await。
  • 需要类型安全:Prisma 或 TypeORM。
  • 简单 CRUD:mysql2 足够。
  • 注意:连接时推荐使用连接池(Pool)来提高性能,避免频繁创建连接。

如果有特定需求(如 TypeScript 支持、性能基准),可以提供更多细节,我可以进一步说明!

相关推荐
2401_8319207415 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
码哥字节27 分钟前
如何在不停机的情况下保证迁移数据库数据的一致性?
数据库
想七想八不如1140843 分钟前
SQL操作学习
数据库·sql·学习
一只大袋鼠1 小时前
数据库知识点梳理(二):从基础操作到底层原理
数据库·oracle
betazhou1 小时前
Oracle JDBC连接串解析DNS的改进
数据库·oracle
原来是猿1 小时前
MySQL【事务下】
数据库·mysql·oracle
2301_776508721 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
东小黑1 小时前
WordPress问题
数据库·wordpress
奕成则成1 小时前
面试被问:MySQL 与 Doris/SelectDB 的架构区别。 大数据为什么禁止select *。
mysql·面试·架构
2401_879693871 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python