[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**
- NodeJS基础
- 什么是NodeJS
- npm
- Node.js+Express+Koa2+开发Web Server博客
- 下载和安装node
- nodejs和js的区别
- commonjs-演示
- nodejs如何debugger
- server端与前端的区别
- 项目需求分析
- 开发接口(不使用任何框架)
- http-概述
- 处理get请求
- 处理post请求
- 处理http请求的综合示例
- 搭建开发环境
- 初始化并且开发路由
- 开发博客项目之数据存储
- MySql介绍
- 数据库操作(创建和增、删、查)
- Nodejs 操作 Mysql
- Nodejs 链接 mysql 做成工具
- API 对接 MySQL
- 开发博客项目之登陆
- cookie-介绍
- cookie用于登录验证
- cookie做限制