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

相关推荐
其实防守也摸鱼7 小时前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github
小白男神8 小时前
MySQL进阶学习三(视图)
后端·mysql
TDengine (老段)8 小时前
TDengine 常见问题 TOP7
大数据·数据库·时序数据库·常见问题·tdengine·涛思数据
+VX:Fegn08958 小时前
计算机毕业设计|基于java+ vue共享单车信息系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
mysqloffice9 小时前
数智时代,核心系统数据库架构往哪走
数据库·人工智能
l1t9 小时前
DeepSeek总结的 pgColumnar 1.0-alpha4 发布说明
数据库·postgresql
DBA_G9 小时前
南大通用GBase 8s数据库助力某农商行核心系统投产
数据库
工业涂料百问9 小时前
【环保合规】系列(四)工业涂料碳足迹怎么算?边界定义、因子选择与减排优先级拆解
数据库
console.log('npc')10 小时前
06 — Model 层:数据模型与操作
前端·后端·node.js·express