Node.js 连接 MySQL 实现增删改查完整指南

Miles
Miles
发布时间:2026-10-15 | 3人浏览过
原创

本文讲解如何基于 Node.js 搭建 MySQL 数据库的连接与交互。从安装依赖、配置连接池开始,演示 SELECT、INSERT、UPDATE 及 DELETE (含软删除) 的标准化写法,推荐使用参数化查询保障数据安全性。

准备阶段:项目初始化与依赖安装

在本地文件夹中使用英文命名且无空格的目录结构,打开终端执行以下命令初始化 package.json 并安装 MySQL 驱动:

# 初始化项目(-y 使用默认配置)
npm init -y

# 安装 mysql 模块作为依赖
npm install mysql

第1步:配置数据库连接

在代码中引入 mysql 模块并创建连接池。建议通过配置文件或环境变量管理敏感信息(如密码),避免硬编码泄露。

const mysql = require('mysql');

// 建立与 MySQL 数据库的连接
const db = mysql.createPool({
    host: '127.0.0.1',   // 数据库 IP 地址
    user: 'root',        // 登录账号
    password: 'admin',   // 登录密码(建议实际使用中替换为强密码)
    database: 'xiaoji'   // 目标数据库名称
});

第2步:测试连接是否正常

调用 db.query() 执行一条简单的测试语句,验证连接是否成功。

db.query("SELECT 1", function (err, results) {
    if (err) return console.error(err.message);
    console.log('连接成功!测试结果:', results);
});

核心操作:增删改查 (CRUD)

1. 查询数据 (Read)

执行 SELECT 查询,结果将以数组形式返回。可使用别名 AS 修改字段名。

// 查询 users 表所有数据
const sqlStr = "SELECT * FROM users";
db.query(sqlStr, function (err, results) {
    if (err) return console.error(err.message);
    // results 是一个数组,包含匹配的所有行
    console.log(results);
});

// 常用 WHERE 过滤示例(直接写 SQL 字符串中):
// SELECT * FROM users WHERE id > 2 AND status = 0;

2. 添加数据 (Create)

推荐使用 ? 占位符传递参数,这比直接拼接字符串更安全,能防止 SQL 注入。

// 方法一:按位置传入数组
const sqlStr = "INSERT INTO users(username, password) VALUES(?, ?)";
const params = ['Spider-Man', 'pcc321'];
db.query(sqlStr, params, function (err, results) {
    if (err) return console.error(err.message);
    console.log(`插入成功,影响行数: ${results.affectedRows}`);
});

// 方法二:对象自动映射(需确保属性名与列名一致)
const userObj = { username: 'Spider2-Man', password: 'pcc321' };
const sqlStr2 = "INSERT INTO users SET ?";
db.query(sqlStr2, userObj, function (err, results) {
    if (err) return console.error(err.message);
    console.log("插入成功");
});

3. 修改数据 (Update)

通过 WHERE 子句锁定特定记录进行更新。

// 方法一:数组参数传值
const sqlStr = "UPDATE users SET username=?, password=? WHERE id=?";
const params = ['xiao1jiao', '111222', 5];
db.query(sqlStr, params, function (err, results) {
    if (err) return console.error(err.message);
    if (results.affectedRows === 1) {
        console.log(`ID ${params[2]} 的数据已修改`);
    }
});

// 方法二:对象自动映射
const updateData = { username: 'aaaa', password: '1111' };
const sqlStr2 = "UPDATE users SET ? WHERE id=?";
db.query(sqlStr2, [updateData, 5], function (err, results) {
    if (err) return console.error(err.message);
    console.log("修改成功");
});

4. 删除数据 (Delete)

物理删除会彻底移除数据。在生产环境中,常使用“标记删除”(软删除)来替代物理删除,即在表中增加一个 status 字段(如 1 代表正常,0 代表删除)。

// 物理删除
const delSql = "DELETE FROM users WHERE id=?";
db.query(delSql, 5, function (err, results) {
    if (err) return console.error(err.message);
    console.log(results.affectedRows === 1 ? '删除成功' : '删除失败');
});

// 推荐做法:标记删除 (软删除)
const softDelSql = "UPDATE users SET status=0 WHERE id=?";
db.query(softDelSql, 5, function (err, results) {
    if (err) return console.error(err.message);
    if (results.affectedRows === 1) {
        console.log('已执行标记删除操作');
    }
});

安全性与排错建议

  • 防注入:始终使用 ? 占位符传递变量。原生拼接 SQL 在处理特殊字符(如富文本中的引号)时极易导致错误,而 ? 会在底层进行自动转义。
  • 错误处理:回调函数的第一个参数始终是 err。若不为空表示出错,应立即返回或处理;只有 err 为空时才处理 results。
  • 连接保持:对于频繁交互的场景,建议使用 mysql.createPool() 而非单次连接,以复用连接提高效率。

以上就是 Node.js 连接 MySQL 实现增删改查的详细内容,更多关于 Node.js 数据库编程的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表