Node.js 使用 mysql 模块操作 MySQL 数据库教程

江岸
江岸
发布时间:2026-10-15| 9人浏览过
原创

在 Node.js 开发中,mysql 是常用的 MySQL 驱动库。本文将详细演示如何安装该模块、建立数据库连接,并通过回调函数实现查询、插入、更新和删除等操作,包含处理错误结果与安全标记删除的最佳实践。

项目准备与环境配置

第1步:安装 mysql 依赖包

确保已安装 Node.js 运行环境。在终端进入项目目录,执行以下命令将 mysql 作为依赖安装:

npm install mysql

第2步:建立数据库连接

在代码入口文件引入模块并创建连接池对象。需配置主机地址、账号、密码及目标数据库名。

const mysql = require('mysql')
const db = mysql.createPool({
  host: '127.0.0.1',
  user: 'root',
  password: '你的密码',
  database: 'mydb01'
})

验证连接可用性

配置完成后,执行一条简单的 SQL 语句测试连接是否正常。若返回数组且无报错,说明连接成功。

db.query('select 1', (err, results) => {
  if(err) return console.log('连接失败:' + err.message)
  console.log('连接测试成功', results)
}) 

数据库常见操作(CRUD)

第3步:查询数据(SELECT)

使用 db.query() 执行 SELECT 语句,第二个参数为回调函数,接收错误信息和结果数组。

const sqlStr = 'select * from user'
db.query(sqlStr, (err, results) => {
  if (err) return console.log(err.message)
  // 查询结果为二维数组
  console.log(results)
})

第4步:插入新数据(INSERT)

通用方式:使用 ?  作为占位符,第二个参数传入对应值的数组以防范 SQL 注入。

// 定义数据对象
const userdata = { username: 'Spider-Man', password: 'secret', status: 0 }
// 定义带有占位符的 SQL
const sqlStr = 'insert into user (username, password, status) values (?, ?, ?)'
// 按顺序传入值数组
db.query(sqlStr, [userdata.username, userdata.password, userdata.status], (err, results) => {
  if (err) return console.log(err.message)
  // affectedRows 表示受影响的行数
  if (results.affectedRows === 1) {
    console.log('插入数据成功!')
  }
})

第5步:插入数据的便捷写法

当对象属性与表字段严格对应时,可使用 SET ? 语法简化代码,模块会自动提取对象键值生成 SQL。

const userdata = { username: 'IronMan', password: 'pwd123', status: 0 }
const sqlStr = 'insert into user set ?'
db.query(sqlStr, userdata, (err, results) => {
  if (err) return console.log(err.message)
  if (results.affectedRows === 1) console.log('插入成功')
})

第6步:更新数据(UPDATE)

修改数据时必须添加 WHERE 条件以防更新全表。推荐使用占位符方式传参。

const userdata = { id: 15, username: 'NewName', password: 'newPwd' }
const sqlStr = 'update user set username=?, password=? where id=?'
db.query(sqlStr, [userdata.username, userdata.password, userdata.id], (err, results) => {
  if (err) return console.log(err.message)
  if (results.affectedRows === 1) console.log('更新成功')
})

第7步:更新的便捷写法

同样支持对象映射方式,注意 id 等不参与 SET 的条件需单独放在数组中。

const userdata = { id: 6, username: 'UpdatedUser', password: 'newPass' }
const sqlStr = 'update user set ? where id=?'
db.query(sqlStr, [userdata, userdata.id], (err, results) => {
  if (err) return console.log(err.message)
  if (results.affectedRows === 1) console.log('更新完成')
})

第8步:删除数据(DELETE)

物理删除风险提醒:直接删除数据不可恢复,生产环境建议采用逻辑删除(标记删除)方案。

逻辑删除实现:通过更新状态字段来模拟删除,例如将 status 设为 1 或 null,下次查询时过滤掉这些数据即可。

// 假设 status=1 代表已删除
const sqlStr = 'update user set status=? where id=?'
db.query(sqlStr, [1, 5], (err, results) => {
  if (err) return console.log(err.message)
  if (results.affectedRows === 1) console.log('标记删除成功')
})

常见问题排查

  • 连接失败:检查 IP、端口及防火墙设置,确认 root 用户是否允许远程连接。
  • 编码问题:中文乱码可在连接配置中添加 charset: 'utf8mb4'。
  • 事务回滚:涉及多行操作时,应开启事务并在出错时调用 rollback。

以上就是 Node.js 利用 mysql 模块操作 MySQL 数据库的详细内容,更多关于 Node.js 数据库开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。