ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[success] # Nodejs 操作 Mysql 上一章学习了 **MySQL** 的基础知识后,本章将了解如何在 **nodejs** 中操作 **Mysql** ,上一章是在 **workbench 客户端** 来进行 **增删改查** 的,实际项目中不可能用它来操作,而是用代码操作,接下来我们讲解一下如何在 **nodejs** 中操作 **Mysql** * **示例:首先我们用 demo 演示,先不考虑使用** * **封装:将其封装为系统可用的工具,也就是封装成一个工具函数,在 nodejs 中执行该函数,传入查询语句或者查询条件就可以查询到数据,封装时还要考虑到【数据库配置】问题,【线上数据库配置】与【线下数据库配置】** * **使用:让 API 直接操作数据库,不再像之前使用假数据** 1. 首先创建一个空白的 **tsts 文件夹**,然后执行 `npm init -y` 进行初始化 2. 安装 **MySQL** 插件,在 **test 文件夹** 中执行 ` npm i mysql --registry=https://registry.npmmirror.com` 进行 **MySQL 插件** 的安装 ![](https://img.kancloud.cn/5a/dd/5add41f10b3e6dfdeb98c67701b25b19_735x457.png) 安装成功后就可以在 **package.json** 中看到了,已经安装成功了 3. 然后我们在 **test 文件夹** 下创建一个 **index.js** 文件,用来在里面写操作 **MySQL 的 demo** **index.js** ~~~ // 引入mysql const mysql = require('mysql') // 创建链接对象 const con = mysql.createConnection({ host: 'localhost', // 域 user: 'root', // 账号 password: 'Wjc13842859435.', // 密码 port: '3306', // 端口号 database: 'myblog' // database: 'myblog' 相当于在 workbench 中执行的 use myblog 指令,意思是使用 myblog 数据库 }) // 开始连接 con.connect() // 执行 sql 语句 const sql = `select * from users;` con.query(sql, (err, result) => { if(err) { // 失败 console.error(err) return } console.log(result) // 成功 }) // 关闭连接 con.end() ~~~ 首先引入 **mysql** ,然后 **创建链接** 来 **连接数据库** ,再 **开始连接数据库** ,然后 **执行 sql 语句** 进行查询,如果 **查询失败就打印结果然后 return 不往下走逻辑了,如果成功就返回查询结果** ,最后 **关闭数据库连接** >[success] ## 在 nodejs 中使用 sql 语句 接下来我们示范 **如何在 nodejs 中使用 sql 语句** >[success] ### 查询 在控制台上输入 `node index.js` 运行文件,就会看到已经成功返回了数据,这是 **查询的结果 ,星号会查询所有的属性字段** ![](https://img.kancloud.cn/9d/95/9d9596e116cc7c051ef7d3553d01f648_715x550.png) 如果我们上面的 **sql 语句不想用星号来查询,只想查询部分字段属性信息,例如想查询 id 跟 username ,就把 sql 语句换成用 id 和 username** 来查询 ~~~ const sql = `select id, username from users;` ~~~ 返回结果就是只有这 **2 个属性** 的对象 ![](https://img.kancloud.cn/2b/6b/2b6bc770ac5a67cdf5dc07a13dfb3045_518x218.png) >[success] ### 更新(修改) 在代码中 **更新数据的话就把 sql 语句替换成更新语句** ,如下代码,**把 username 等于 lisi 的这条数据的 realname 修改为 李四2** ~~~ const sql = `update users set realname='李四2' where username='lisi'` ~~~ 然后在控制台执行一下,返回结果 ![](https://img.kancloud.cn/d2/2e/d22e65ed5e8aae9cc79eb4ac619f2ee9_588x343.png) 这里的 **affectedRows: 1** 意思是更新一行数据成功,**这里返回的 **1** 这个值就是后续接口中返回布尔值时,1就返回 true,0就返回false** >[success] ### 插入(新增) 把 **sql 语句** 换成下面的 **sql 语句** ~~~ const sql = `insert into blogs(title, content, createtime, author) values('标题C', '内容C', '1646636104797', 'zhangsan');` ~~~ 然后在控制台执行一下,返回结果 ![](https://img.kancloud.cn/18/3b/183b70df449bf369ab25557cb6ce0c0d_514x386.png) ![](https://img.kancloud.cn/80/b3/80b3698d4411f937267d560fe0a09c9e_386x134.png) 插入成功后这里会返回一个 **insertId,这个 id 就是插入的这条数据的 id**