node.js对于数据库MySQL基本操作方法有哪些

前端开发   发布日期:2025年04月04日   浏览次数:169

本篇内容介绍了“node.js对于数据库MySQL基本操作方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

数据库MySQL基本操作(增删改查)

整个博客统一表结构为:
users表 四个字段id username password status,四个字段代表四列,其中id为自增列,status默认值为0,可选值0,1
id自增, username分别为zs,ls,wu password分别为:123456 abcdef 123abc status为0,1,1

  1. #查询整张表的所有数据
  2. select * from users
  3. #查询指定列的所有数据
  4. select username,password from users
  5. #指定某列添加数据
  6. insert into users(username,password) values('萧寂','1234')
  7. #指定某列修改数据
  8. update users set username="你好a",password="1234567",status=1 where id=2
  9. #根据id删除行
  10. delete from users where id=4
  11. #查询status为1的所有用户
  12. SELECT *FROM users WHERE status=1
  13. #查询id 大于2的所有用户
  14. SELECT *FROM users WHERE id>2
  15. #查询username不等于admin的所有用户
  16. SELECT *FROM users WHERE username<>'admin'
  17. #使用AND来显示所有status为0,并且id 小于3的用户:
  18. SELECT * FROM users WHERE status=0 AND id<3
  19. #使用OR来显示所有status为1,或者username为zs的用户
  20. SELECT* FROM users WHERE status=1 OR username='zs'
  21. #对users表中的数据,按照status字段进行升序排序
  22. SELECT * FROM users ORDER BY status;(升序排序在status后加上ASC效果等同)
  23. select * from users order by status asc
  24. #根据id降序排序,降序排序使用desc关键字
  25. select * from users order by id desc
  26. #多重排序 对users 表中的数据,先按照status字段进行降序排序,再按照username的字母顺序,进行升序排序
  27. SELECT * FROM users ORDER BY status DESC,username asc
  28. #查询id为1的数据返回的总条数
  29. select count(*) from users where id=1
  30. #将列名称从COUNT(*)修改为total
  31. SELECT COUNT(*) AS total FROM users WHERE id=1
  32. #给username列添加uname别名,给password列添加upwd别名
  33. select username as uname,password as upwd from users

node.js项目中的增删改查

首先先执行命令初始化package.json包

  1. npm init -y (文件名为英文,不能有空格、特殊字符或中文,否则报错)

mysql模块是托管于npm 上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。
想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:

  1. npm install mysql 或者 npm i mysql

上面操作完成后开始配置MySQL模块

配置MySQL模块

在使用mysql模块操作MySQL数据库之前,必须先对 mysql模块进行必要的配置,主要的配置步骤如下:

  1. //导入MySQL模块
  2. const mysql = require("mysql")
  3. //建立与MySQL数据库的连接
  4. const db = mysql.createPool({
  5. host: "127.0.0.1", //数据库的IP地址
  6. user: "root", //登录数据库的账号
  7. password: "admin", //登录数据库的密码
  8. database: "xiaoji" //指定要操作哪个数据库
  9. })

测试模块能否正常连接工作(执行运行命令node 文件名 或者 nodemon 文件名)

调用

  1. db.query()
函数,指定要执行的SQL语句,通过回调函数拿到执行的结果
  1. db.query("select 1", function (err, results) {
  2. //模块报错返回错误信息
  3. if (err) return console.log(err.message);
  4. //运行成功
  5. console.log(results);
  6. })

测试成功的返回结果为:[ RowDataPacket { &lsquo;1&rsquo;: 1 } ]

查询表的SQL代码(表名和结构看第一行)

  1. 查询数据user表中所有的用户数据
  2. const sqlStr = "select * from users"
  3. db.query(sqlStr, function (err, results) {
  4. //查询失败
  5. if (err) return console.log(err.message);
  6. //查询成功
  7. //注意如果执行的是select查询语句,则执行的结果是数组
  8. console.log(results);
  9. })

添加数据的SQL语句(两种方法)

  1. //插入数据
  2. //向users表中新增数据,其中username为Spider-Man,password为pcc321
  3. //要插入到users表中的数据对象
  4. const user = { username: "Spider-Man", password: "pcc321" }
  5. //待执行的SQL语句,其中的?表示占位符
  6. const sqlStr = "insert into student(student,card) values(?,?)"
  7. //使用数组的形式,依次为?占位符具体的值(result.affectedRows为影响的行数)
  8. db.query(sqlStr, [user.username, user.password], function (err, results) {
  9. if (err) return console.log(err.message);
  10. if (results.affectedRows == 1) {
  11. console.log("插入成功");
  12. }
  13. })
  14. //向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速插入数据:
  15. //要插入到users表中的数据对象
  16. const user = { username: "Spider2-Man", password: "pcc321" }
  17. //待执行的SQL语句,其中的?表示占位符
  18. const sqlStr = "insert into users set ?"
  19. db.query(sqlStr, user, function (err, results) {
  20. if (err) return console.log(err.message);
  21. if (results.affectedRows == 1) {
  22. console.log("插入成功");
  23. }
  24. })

修改数据的SQL语句(两种方法)

  1. //修改表中的数据
  2. //向users表中更新的数据,其中username为Spider-Man,password为pcc321,id为5
  3. const user = { id: 7, username: "xiao1jiao", password: "111222" }
  4. //待执行的sql语句,其中的?表示占位符
  5. const sqlStr = "update users set username=?,password=? where id=?"
  6. //使用数组的形式,依次为?占位符具体的值(result.affectedRows为影响的行数)
  7. db.query(sqlStr, [user.username, user.password, user.id], function (err, results) {
  8. if (err) return console.log(err.message);
  9. if (results.affectedRows == 1) {
  10. console.log("修改", user.id, "列成功");
  11. }
  12. })
  13. //修改表数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速修改表数据
  14. //向users表中更新的数据,其中username为aaaa,password为1111,id为5
  15. const user = { id: 5, username: "aaaa", password: "1111" }
  16. //待执行的sql语句,其中的?表示占位符
  17. const sqlStr = "update users set ? where id=?"
  18. //使用数组的形式,依次为?占位符具体的值(result.affectedRows为影响的行数)
  19. db.query(sqlStr, [user, user.id], function (err, results) {
  20. if (err) return console.log(err.message);
  21. if (results.affectedRows == 1) {
  22. console.log("修改", user.id, "列成功");
  23. }
  24. })

删除数据的SQL语句

  1. //在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据。示例如下:
  2. const sqlStr = "delete from users where id=?"
  3. //调用db.query(O)执行SQL语句的同时,为占位符指定具体的值
  4. //注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
  5. //如果SQL语句中只有一个占位符,则可以省略数组
  6. db.query(sqlStr, 5, function (err, results) {
  7. if (err) return console.log(err.message);
  8. //注意:执行 delete语句之后,结果也是一个对象,也会包含 affectedRows属性
  9. if (results.affectedRows == 1) {
  10. console.log("删除成功");
  11. }
  12. })

标记删除的情况

  1. //标记删除
  2. //使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
  3. //所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
  4. //当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可。
  5. //标记删除:使用 UPDATE语句替代 DELETE语句;只更新数据的状态,并没有真正删除
  6. const sqlStr = "update users set status=? where id=?"
  7. db.query(sqlStr, [0, 7], function (err, results) {
  8. if (err) return console.log(err.message);
  9. if (results.affectedRows == 1) {
  10. console.log("标记删除成功");
  11. }
  12. })

注:文章所述的?占位符标记方法具有更好的兼容行,笔者曾经做过测试,使用原生SQL语句拼接字段后直接使用db.query语句执行,结果在处理富文本数据的时候报出了错误,需要进行字符转义处理。而使用?占位符则不会有这种情况出现。

以上就是node.js对于数据库MySQL基本操作方法有哪些的详细内容,更多关于node.js对于数据库MySQL基本操作方法有哪些的资料请关注九品源码其它相关文章!