【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 支持、性能基准),可以提供更多细节,我可以进一步说明!

相关推荐
ew452183 分钟前
MySQL JOIN 关联语法、差异、标准用法、经典坑点汇总
数据库·mysql
Rain的Java大神之路38 分钟前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
Nturmoils44 分钟前
给运营导个 CSV,在 ksql 里用 \copy 就够了
数据库
ciqingloveless1 小时前
Oracle打开数据库加密
数据库·oracle
xywww1681 小时前
Node.js Claude API 实战接入:SDK 调用 Opus 5、环境变量配置与报错排查
node.js
m0_462605221 小时前
大模型week02
数据库
DBA_G2 小时前
GBase 8a数据库集群多维度资源管控策略矩阵解析
数据库·oracle
weixin_431600442 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
深念Y2 小时前
基于 NapCat 与本地 RAG 的群聊 AI 机器人方案(ARM64 部署)
人工智能·ai·机器人·node.js·自动化·情感陪伴·bot
逐米时代3 小时前
智能招聘与人岗匹配:可解释匹配让录用依据有迹可循
大数据·数据库·人工智能