mysql Node.js操作mysql用什么库_mysql JS类库推荐

来源:这里教程网 时间:2026-02-28 20:40:30 作者:

Node.js 操作 MySQL,

mysql2
是当前最推荐、最主流的选择,它兼容原生
mysql
库的 API,但性能更好、支持 Promise 和预处理语句,且持续维护活跃。

为什么不用原生
mysql
库?

原生

mysql
(即
mysqljs/mysql
)已进入维护模式,不再新增功能,且不支持 Promise、流式大结果集处理效率低、预处理语句有安全风险(需手动转义)。实际项目中已普遍被
mysql2
替代。

官方明确建议迁移:README 中直接指向 mysql2
mysql2
的查询速度通常快 20%–30%,尤其在批量插入/查询时更明显
默认启用
typeCast
类型自动转换,避免
Buffer
或字符串混用问题

mysql2/promise
怎么开箱即用?

直接导入 Promise 版本,避免回调嵌套,配合

async/await
写法清晰、错误可控。

const mysql = require('mysql2/promise');
<p>const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'testdb',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});</p><p>async function getUser(id) {
const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [id]);
return rows[0];
}
务必用
pool.execute()
(而非
query()
)触发预处理语句,防 SQL 注入
execute()
参数必须是数组,即使只有一个值,如
[id]
query()
支持字符串插值,但不安全
连接池配置中
queueLimit: 0
表示不限制等待队列长度,避免请求被静默丢弃

ORM 还是原生驱动?什么场景该选哪个?

如果只是简单 CRUD、对性能敏感、需要精细控制 SQL 或复用现有查询逻辑,直接用

mysql2
更轻量、调试直观;若业务模型复杂、频繁关联查询、团队倾向声明式开发,可考虑
Prisma
Drizzle ORM
(它们底层也默认使用
mysql2
)。

Prisma
:强类型、自动生成客户端、迁移友好,但启动略重,不适合极简脚本
Drizzle ORM
:编译时 SQL 构建、零运行时开销,适合 TypeScript 重度用户
mysql2
:无抽象层,SQL 完全自主,出错时堆栈直达执行点,排查快

真正容易被忽略的是连接泄漏——忘记

await pool.end()
或没正确处理异常导致连接不释放。生产环境务必用
try/catch/finally
包裹或使用
using
(Node.js 20.12+)确保连接归还。

相关推荐