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

相关推荐
程序人生5187 分钟前
宝塔安装完mysql5.7后 root无法通过远程连接问题排查
mysql·宝塔面板
大厂技术总监下海18 分钟前
用户行为分析怎么做?ClickHouse + 嵌套数据结构,轻松处理复杂事件
大数据·数据结构·数据库
alonewolf_9927 分钟前
深入理解MySQL事务与锁机制:从原理到实践
android·数据库·mysql
骑着bug的coder43 分钟前
第11讲:主从复制与读写分离架构
后端·mysql
朝依飞44 分钟前
fastapi+SQLModel + SQLAlchemy2.x+mysql
数据库·mysql·fastapi
3***g2051 小时前
redis连接服务
数据库·redis·bootstrap
m0_598177231 小时前
SQL 方法函数(1)
数据库
oMcLin1 小时前
如何在Oracle Linux 8.4上通过配置Oracle RAC集群,确保企业级数据库的高可用性与负载均衡?
linux·数据库·oracle
信创天地1 小时前
核心系统去 “O” 攻坚:信创数据库迁移的双轨运行与数据一致性保障方案
java·大数据·数据库·金融·架构·政务
胖咕噜的稞达鸭1 小时前
进程间的通信(1)(理解管道特性,匿名命名管道,进程池,systeam V共享内存是什么及优势)重点理解代码!
linux·运维·服务器·数据库