mysql mysql2库怎么用_Node连接mysql示例说明
#技术教程 发布时间: 2026-01-17
mysql2推荐使用promise版,支持参数化execute防注入、连接池配置防崩溃、事务需手动rollback和release。
mysql2 连接 MySQL 的基本写法
直接用 mysql2 建立连接,比老版 mysql 库更推荐——它原生支持 Promise、批量查询、流式读取,且默认启用连接池。
最简连接示例(不带错误处理):
const mysql = require('mysql2/promise');
const connection = await mysql.createConnection({
host

: 'localhost',
user: 'root',
password: '123456',
database: 'test_db',
port: 3306
});const [rows] = await connection.execute('SELECT * FROM users WHERE id = ?', [1]);
注意:mysql2/promise 是开启 Promise 支持的入口;若用 require('mysql2'),得手动包装成 Promise 或用回调。
为什么 execute() 比 query() 更安全
execute() 自动做 SQL 参数化,彻底避免拼接字符串导致的注入风险;query() 虽也支持占位符,但容易误用字符串拼接。
-
execute('SELECT * FROM t WHERE id = ?', [id])✅ 安全,参数被强制转义 -
query('SELECT * FROM t WHERE id = ' + id)❌ 危险,id 若为"1 OR 1=1"就炸了 -
query('SELECT * FROM t WHERE name = ?', [name])✅ 可行,但不如execute语义明确
另外,execute() 返回的是 [rows, fields] 数组解构,fields 包含列元信息,调试时很有用。
连接池怎么配才不崩
生产环境别用单连接,要用 createPool。常见崩点是没设 waitForConnections 和 queueLimit,高并发下直接拒绝请求。
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '123456',
database: 'test_db',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0 // 0 表示不限队列长度,避免抛 ECONNREFUSED
});关键参数说明:
-
connectionLimit:最大活跃连接数,一般设为数据库 max_connections 的 70% 左右 -
waitForConnections:设 false 时,连接池满会立刻报PoolClosedError;设 true 才排队 -
queueLimit:设 0 表示无限排队;设正整数(如 100)则超限直接 reject -
acquireTimeout:获取连接超时毫秒,默认 10s,可按业务调低(比如 3000)
事务里怎么正确 rollback
用 beginTransaction() + commit() / rollback() 时,必须确保所有分支都覆盖异常处理,否则连接可能卡在事务中不释放。
const connection = await pool.getConnection();
try {
await connection.beginTransaction();
await connection.execute('INSERT INTO orders (...) VALUES (?)', [...]);
await connection.execute('UPDATE stock SET count = count - 1 WHERE id = ?', [sid]);
await connection.commit();
} catch (err) {
await connection.rollback(); // 必须写!且不能只 catch 不 rollback
throw err;
} finally {
connection.release(); // 记得归还连接,不然池子迟早耗尽
}容易漏的点:
- 忘记
connection.release()→ 连接泄漏,池子逐渐枯竭 - 在
catch里没调rollback()→ 事务挂起,锁表或阻塞其他操作 - 用
pool.execute()执行事务?不行,事务必须复用同一个connection
事务必须绑定到一个具体连接上,不能靠池子自动分发。
技术教程SEO上一篇 : OPPO手机怎么开启APP智能侧边栏_开启智能侧边栏快速切换的技巧【指南】
下一篇 : 怎么把Windows 11的搜索栏从任务栏上隐藏【界面设置】
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
