在 Node.js 中连接 MySQL 数据库,主要有以下几种常见方案,从底层驱动到高级抽象层不等。以下是当前(2025 年)主流且活跃的选项,按流行度和推荐度排序:
1. mysql2(最推荐的底层驱动)
-
描述:这是目前最流行、最活跃的 MySQL 客户端库,纯 JavaScript 实现,性能优秀,支持 Prepared Statements、连接池、压缩、SSL 等高级特性。
-
优势 :
- 原生支持 Promise 和 async/await(通过
mysql2/promise或.promise()方法)。 - 比旧的
mysql更快、更现代。 - API 与旧
mysql高度兼容,便于迁移。
- 原生支持 Promise 和 async/await(通过
-
安装 :
npm install mysql2 -
基本示例 :
javascriptconst 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 支持、性能基准),可以提供更多细节,我可以进一步说明!