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

相关推荐
codingWhat14 小时前
整理「祖传」代码,就是在开发脚手架?
前端·javascript·node.js
ServBay15 小时前
Node.js、Bun 与 Deno,2026 年后端运行时选择指南
node.js·deno·bun
倔强的石头_15 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
码路飞21 小时前
Node.js 中间层我维护了两年,这周终于摊牌了——成本账单算完我人傻了
node.js
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
None3212 天前
【NestJs】使用Winston+ELK分布式链路追踪日志采集
javascript·node.js
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
Dilettante2582 天前
这一招让 Node 后端服务启动速度提升 75%!
typescript·node.js
Mr_li3 天前
NestJS 集成 TypeORM 的最优解
node.js·nestjs
UIUV3 天前
node:child_process spawn 模块学习笔记
javascript·后端·node.js