Node.js 项目中操作 MySQL 数据库的完整指南
本文详细介绍在 Node.js 项目中如何使用 mysql 模块连接并操作 MySQL 数据库。内容涵盖模块安装、连接配置、SQL 执行测试,以及查询、插入、更新、删除和标记删除等核心 CRUD 操作的代码示例与注意事项,帮助开发者快速掌握数据库交互技能。
在 Node.js 项目中操作 MySQL 数据库,主要包含三个核心步骤。
第一步,安装用于操作 MySQL 数据库的第三方模块(mysql)。
第二步,通过该 mysql 模块建立与 MySQL 数据库的连接。
第三步,利用 mysql 模块执行具体的 SQL 语句以完成数据操作。

接下来,我们将详细讲解 mysql 模块的安装与配置过程。
首先,我们需要安装 mysql 模块。
该模块托管于 npm 平台上,是一个第三方模块,旨在为 Node.js 项目提供连接和操作 MySQL 数据库的能力。
若要在项目中使用该模块,需先运行特定命令将其安装为项目的依赖包。
npm install mysql
具体操作如下所示。

安装完成后,需要对 mysql 模块进行配置。
MySQL 数据库中的初始数据状态如下图所示。

在使用 mysql 模块进行数据库操作前,必须完成必要的配置,主要步骤包括初始化连接池等设置。
//导入模块
const mysql = require('mysql')
//建立与mysql数据库的联系
const db = mysql.createPool({
host:'127.0.0.1', //数据库的IP地址
user:'root', //登录数据库的账号
password:'******',//登录数据库的密码
database:'bear2' //指定要操作哪个数据库
})
配置完成后,我们需要测试 mysql 模块是否能正常工作。
通过调用 db.query() 函数,指定要执行的 SQL 语句,并在回调函数中获取执行结果。
//测试mysql能否正常工作
db.query('SELECT 1',(err,results)=>{
if(err) return console.log(err.message)
//能够成功的执行SQL语句
console.log(results)
})
测试结果显示模块运行正常。

确认模块可用后,即可开始使用 mysql 模块对 MySQL 数据库进行实际操作。
首先介绍如何查询数据。
例如,查询 student 表中的所有数据。
db.query('SELECT * FROM STUDENT',(err,results)=>{
//查询失败
if(err) return console.log(err.message)
//查询成功
console.log(results)
})
查询执行后的结果如下。

查询成功,返回的结果是一个数组。
接下来介绍如何插入数据。
向 student 表中新增数据,其中 cname 的值为 '小延',age 的值为 16。示例代码如下:
//要插入到student表中的数据对象
const student = {cname:'小延',age:16}
//待执行的SQL语句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO student(cname,age)VALUES(?,?)'
//使用数组的形式,依次为占位符指定具体的值
db.query(sqlStr,[student.cname,student.age],(err,results)=>{
if(err) return console.log(err.message) //失败
if(results.affectedRows === 1){
console.log('插入成功') //成功
}
})
执行结果如下。

打开数据库查看数据,具体表现如:

数据插入成功。
此外,还有一种插入数据的便捷方式。
当向表中新增数据时,如果数据对象的每个属性与数据表的字段一一对应,可以通过以下方式快速插入数据:
//要插入到student表中的数据对象
const student = {cid:9,cname:'小杨',age:18,class_id:1002}
//待执行的SQL语句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO student SET ?'
//直接将数据对象当做占位符的值
db.query(sqlStr,student,(err,results)=>{
if(err) return console.log(err.message) //失败
if(results.affectedRows === 1) console.log('插入数据成功!')
})
执行结果如下。

打开数据库查看数据,具体表现如:

数据插入成功。
随后介绍如何更新数据。
可以通过以下方式更新表中的数据:
//要更新的数据对象
const student = {cid: 8, cname: '小欣', age: 18, class_id: 1002}
//要执行的SQL语句
const sqlStr = 'UPDATE student SET cname=?,age=?,class_id=? WHERE cid=?'
//调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[student.cname,student.age,student.class_id],(err,results)=>{
if(err) return console.log(err.message) //失败
if(results.affectedRows === 1) {
console.log('更新数据成功!')
}
})
执行结果如下。

打开数据库查看数据,具体表现如:

数据更新成功。
同样,更新数据也有便捷方式。
在更新表数据时,如果数据对象的每个属性与数据表的字段一一对应,可以通过以下方式快速更新表数据:
const student = {cid:1,cname:'小钰',age:17,class_id:1003}
//要执行的SQL语句
const sqlStr = 'UPDATE student SET ? WHERE cid=?'
调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[student,student.cid],(err,results)=>{
if(err) return console.log(err.message) //失败
if(results.affectedRows === 1){
console.log('数据更新成功!') //成功
}
})
执行结果如下。

打开数据库查看数据,具体表现如:

数据更新成功。
接着介绍如何删除数据。
在删除数据时,最好根据 cid 这样的唯一标识来删除对应的数据。示例如下:
//要执行的SQL语句
const sqlStr = 'DELETE FROM student WHERE cid=?'
//调用db.query()执行sql语句的同时,为占位符指定确定的值
db.query(sqlStr,3,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){ // 失败
console.log('删除数据成功!') //成功
}
})
执行结果如下。

打开数据库查看数据,具体表现如:

删除数据成功。
需要注意的是:如果 SQL 语句有多个占位符,则必须为每个占位符指定具体的值;如果 SQL 语句只有一个占位符,则可以省略数组形式。
最后介绍标记删除的概念。
使用 DELETE 语句会真正将数据从表中删除。为了保险起见,推荐使用标记删除的形式来模拟删除动作。
所谓的标记删除,就是在表中设置类似于 class_id 这样的状态字段,用来标记当前这条数据是否被删除。
当用户执行删除动作时,我们并不执行 DELETE 语句把数据删除,而是执行 UPDATE 语句,将这条数据对应的 class_id 字段标记为删除即可。
//标记删除:使用UPDATE语句代替DELETE语句;只更新数据的状态,并没有真正删除。
db.query('UPDATE student SET class_id=? WHERE cid=?',[1000,6],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){ // 失败
console.log('标记删除成功!') //成功
}
})
执行结果如下。

打开数据库查看数据,具体表现如:

标记删除成功。
以上就是 Node.js 如何在项目中操作 MySQL 的详细内容,更多关于 Node.js 操作 MySQL 的资料请关注本站其它相关文章!
前端JS防止SQL注入的两种实现方式
2026-10-30 05:23:31
jQuery实现元素拖动排序及数据库更新示例
2026-10-28 07:22:28
JS实现无需数据库的县级以上联动行政区域下拉控件
2026-10-27 13:41:08
JavaScript 读写本地 SQLite 数据库:封装类与浏览器 Demo 实践
2026-10-26 11:06:32
前端为什么需要监控系统:从异常捕获到自研实践
2026-10-25 13:01:10
