Node.js 编程实战:MySQL PostgreSQL数据库操作详解

在后端开发中,关系型数据库依然占据着重要地位。MySQL 和 PostgreSQL 是最常用的两种关系型数据库,前者轻量易用,后者功能强大、规范严格。Node.js 通过成熟的数据库驱动与 ORM 工具,可以高效地与这两种数据库进行交互。本文将从基础连接开始,逐步讲解在 Node.js 中操作 MySQL 与 PostgreSQL 的常见方式与最佳实践。


一、为什么在 Node.js 中使用关系型数据库

关系型数据库在以下场景中仍然非常适合:

  • 数据结构稳定、字段明确
  • 需要复杂查询与多表关联
  • 对事务一致性要求较高
  • 金融、订单、账务等核心业务

Node.js 的异步 I/O 模型可以很好地应对数据库访问延迟,与 MySQL、PostgreSQL 配合使用非常成熟。


二、MySQL 与 PostgreSQL 的差异简述

在选择数据库之前,理解它们的特点非常重要:

  • MySQL:部署简单、生态成熟、性能优秀,适合大多数 Web 应用
  • PostgreSQL:支持更多 SQL 标准,事务和扩展能力更强,适合复杂业务

在 Node.js 层面,两者的使用方式非常相似。


三、Node.js 操作 MySQL

1. 安装 MySQL 驱动

Node.js 中最常用的 MySQL 驱动是 mysql2

bash 复制代码
npm install mysql2

2. 创建数据库连接

js 复制代码
const mysql = require("mysql2/promise");

const pool = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "password",
  database: "node_demo",
  waitForConnections: true,
  connectionLimit: 10
});

使用连接池可以避免频繁创建和关闭连接,提高性能。


3. 执行查询

js 复制代码
const [rows] = await pool.query(
  "SELECT id, username FROM users WHERE age > ?",
  [18]
);

console.log(rows);

使用占位符可以有效防止 SQL 注入。


4. 插入与更新数据

js 复制代码
await pool.execute(
  "INSERT INTO users (username, age) VALUES (?, ?)",
  ["tom", 25]
);

await pool.execute(
  "UPDATE users SET age = ? WHERE username = ?",
  [26, "tom"]
);

四、Node.js 操作 PostgreSQL

1. 安装 PostgreSQL 驱动

bash 复制代码
npm install pg

2. 创建连接池

js 复制代码
const { Pool } = require("pg");

const pool = new Pool({
  host: "localhost",
  user: "postgres",
  password: "password",
  database: "node_demo",
  max: 10
});

3. 查询数据

js 复制代码
const result = await pool.query(
  "SELECT id, username FROM users WHERE age > $1",
  [18]
);

console.log(result.rows);

PostgreSQL 使用 $1$2 作为参数占位符。


4. 插入与删除数据

js 复制代码
await pool.query(
  "INSERT INTO users (username, age) VALUES ($1, $2)",
  ["alice", 22]
);

await pool.query(
  "DELETE FROM users WHERE username = $1",
  ["alice"]
);

五、事务处理

在涉及多步操作时,事务尤为重要。

MySQL 示例

js 复制代码
const conn = await pool.getConnection();

try {
  await conn.beginTransaction();
  await conn.query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
  await conn.query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
  await conn.commit();
} catch (err) {
  await conn.rollback();
} finally {
  conn.release();
}

PostgreSQL 示例

js 复制代码
const client = await pool.connect();

try {
  await client.query("BEGIN");
  await client.query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
  await client.query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
  await client.query("COMMIT");
} catch (err) {
  await client.query("ROLLBACK");
} finally {
  client.release();
}

事务是保证数据一致性的关键手段。


六、使用 ORM 简化数据库操作

在实际项目中,通常会使用 ORM 框架,如:

  • Sequelize
  • TypeORM
  • Prisma

ORM 的优势在于:

  • 使用对象操作数据库
  • 跨数据库支持
  • 自动生成 SQL
  • 更清晰的代码结构

但同时也需要注意 ORM 带来的性能开销。


七、数据库操作的最佳实践

在 Node.js 项目中操作关系型数据库时,建议遵循以下原则:

  • 始终使用连接池
  • 使用参数化查询,防止 SQL 注入
  • 控制单次查询的数据量
  • 合理使用事务
  • 为高频查询建立索引
  • 捕获并记录数据库错误

这些实践能显著提高系统稳定性。


八、总结

通过本文,你已经掌握:

  • Node.js 操作 MySQL 与 PostgreSQL 的基本方式
  • 使用连接池提升性能
  • 常见的 CRUD 操作与事务处理
  • MySQL 与 PostgreSQL 的差异
  • 实际项目中的数据库使用建议

MySQL 与 PostgreSQL 仍然是 Node.js 后端开发的重要基石。熟练掌握它们的使用方式,可以让你在面对复杂业务场景时更加从容。


相关推荐
腾渊信息科技公司35 分钟前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
IT_陈寒2 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学2 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
码事漫谈3 小时前
1999年的电商前夜和2026年的AI前夜 历史押韵但从不重复
后端
Conan在掘金3 小时前
鸿蒙报错速查:arkts-strict-typing Property does not exist on type 'object',object 装函数就炸,根因 + 真解法
后端
颜酱3 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
程序员cxuan4 小时前
Grok Build 被众人唾骂,结果老马把它开源了
人工智能·后端·程序员
从零开始的代码生活_4 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
Conan在掘金4 小时前
�鸿蒙报错速查:Cannot find name 'require',禁用 require(),根因 + 真解法
后端
隔窗听雨眠4 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生