Nodejs+MySQL数据库管理
常用操作方式
- 直接执行SQL语句
- 使用占位符(防止SQL注入)[推荐]
- 使用
async/await
(结合mysql2/promise
) - 使用 ORM(如
Sequelize
)
执行方式分类和比较
按数据库连接管理分类
- 普通连接
- 使用连接池(
pool
,推荐) - 使用事务(保证数据一致性)
普通连接
每次查询时创建和关闭连接
const db = mysql.createConnection({ /* 配置 */ });
db.connect();
db.query('INSERT INTO users SET ?', { name: 'Alice', email: 'alice@example.com' });
db.end();
缺点:大量查询时性能低
使用连接池(pool
,推荐)
const pool = mysql.createPool({ connectionLimit: 10, /* 其他配置 */ });
pool.query('INSERT INTO users SET ?', { name: 'Alice', email: 'alice@example.com' }, (err, result) => {
if (err) throw err;
console.log('插入成功', result.insertId);
});
优点:适合高并发,多个查询共享连接池。
推荐用于生产环境。
使用事务(保证数据一致性)
如果多个 SQL 语句必须要么全部成功,要么全部失败(如银行转账),可以使用事务
db.beginTransaction(err => {
if (err) throw err;
db.query('UPDATE accounts SET balance = balance - 100 WHERE id = 1', err => {
if (err) return db.rollback(() => console.error(err));
db.query('UPDATE accounts SET balance = balance + 100 WHERE id = 2', err => {
if (err) return db.rollback(() => console.error(err));
db.commit(err => {
if (err) return db.rollback(() => console.error(err));
console.log('✅ 事务提交成功');
});
});
});
});
适用于银行、订单支付等场景。
确保数据一致性,不会出现资金丢失问题。
总结
- 普通增删改查 ➝ 使用占位符 (
**?**
) 方式 - 高并发 ➝ 使用
**pool**
连接池 - 异步处理 ➝ **使用 **
**mysql2/promise**
- 订单/支付系统 ➝ 使用事务