Node.js 使用 mysql 模块操作 MySQL 数据库教程
在 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 数据库开发的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









