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 后端开发的重要基石。熟练掌握它们的使用方式,可以让你在面对复杂业务场景时更加从容。


相关推荐
Ryana6 小时前
协程不是银弹:历时半年,终于搞清了每分钟120次YGC的真相
jvm·后端
Sammyyyyy6 小时前
Django 6.0 发布,新增原生任务队列与 CSP 支持
数据库·后端·python·django·sqlite·servbay
雨雨雨雨雨别下啦6 小时前
SSM+Spring Boot+Vue.js3期末复习
vue.js·spring boot·后端
honder试试6 小时前
Springboot实现Clickhouse连接池的配置和接口查询
spring boot·后端·clickhouse
武子康6 小时前
大数据-185 Logstash 7 入门实战:stdin/file 采集、sincedb/start_position 机制与排障
大数据·后端·logstash
想搞艺术的程序员6 小时前
Go语言环形队列:原理剖析、编程技巧与核心优势
后端·缓存·golang
资深web全栈开发7 小时前
Golang 最常用的库介绍
开发语言·后端·golang
源码获取_wx:Fegn08957 小时前
基于springboot + vue考勤管理系统
java·开发语言·vue.js·spring boot·后端·spring·课程设计
Haooog7 小时前
RabbitMQ面试题(不定时更新)
分布式·后端·面试·rabbitmq·消息中间件