Node.js笔记--Day5
目录
1.【数据库的基本概念】
1.1 什么是数据库
1.2 常见的数据库及分类
1.3 传统型数据库的数据组织结构
2.【安装并配置MySQL】
2.1【了解需要安装哪些MySQL相关的软件】
2.2 MySQL在 Mac 环境下的安装
2.3 MySQL在 Windows环境下的安装
3.【MySQL的基本使用】
3.1 使用MySQL Workbench 管理数据库
3.2 使用SQL管理数据库
3.3 SQL 的SELECT 语句
3.4 SQL的INSERT INTO语句
3.5 SQL 的 UPDATE 语句
3.6 SQL的DELETE 语句
3.7 SQL 的 WHERE 子句
3.8 SQL 的 AND 和 OR 运算符
3.9 SQL 的 ORDER BY 子句
3.10 SQL的COUNT(*)函数
4.2 【在项目中操作 MySQL 】
4.1 在项目中操作数据库的步骤
4.2 安装与配置mysql模块
4.3 使用mysql模块操作MySQL数据库
1.【数据库的基本概念】
1.1 什么是数据库
数据库(database)是用来组织、存储和管理数据的仓库。
当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
为了方便管理互联网世界中的数据,就有了数据库管理系统的概念.(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。
1.2 常见的数据库及分类
最常见的数据库有如下几个:
1.MySQL数据库(目前使用最广泛、流行度最高的开源免费数据库;Community(社区免费版)+ Enterprise(企业收费版))2.Oracle数据库(收费)
3.SQL Server数据库(收费)
4.Mongodb 数据库(Community + Enterprise)MySQL、Oracle、SQL Server属于传统型数据库(又叫做:关系型数据库或SQL数据库),这三者的设计理念相同,用法比较类似。
Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一定程度上弥补了传统型数据库的缺陷。
1.3 传统型数据库的数据组织结构
数据的组织结构:指的就是数据以什么样的结构进行存储。
传统型数据库的数据组织结构,与Excel中数据的组织结构比较类似。
因此,我们可以对比着Excel来了解和学习传统型数据库的数据组织结构。
Excel的数据组织结构
每个Excel中,数据的组织结构分别为工作簿、工作表、数据行、列这4大部分组成。
1.整个Excel叫做工作簿
2.users和books是工作表
3.users工作表中有3行数据
4.每行数据由6列信息组成
5.每列信息都有对应的数据类型
传统型数据库的数据组织结构
在传统型数据库中,数据的组织结构分为数据库(database)、数据表(table)、数据行(row)、字段(field)这4大部分组成。
1.数据库类似于Excel的工作簿
2.数据表类似于Excel的工作表
3.数据行类似于Excel的每一行数据
4.字段类似于Excel的列
5.每个字段都有对应的数据类型
实际开发中库、表、行、字段的关系
1.在实际项目开发中,一般情况下,每个项目都对应独立的数据库。
2.不同的数据,要存储到数据库的不同表中,例如:用户数据存储到users 表中,图书数据存储到 books 表中。3.每个表中具体存储哪些信息,由字段来决定,例如:我们可以为users 表设计id、username、password这3个
字段。
4.表中的行,代表每一条具体的数据。
2.【安装并配置MySQL】
2.1【了解需要安装哪些MySQL相关的软件】
对于开发人员来说,只需要安装 MySQL Server和MySQL Workbench这两个软件,就能满足开发的需要了。
MySQL Server: 专门用来提供数据存储和服务的软件。
MysQl Workbench:可视化的MySQL管理工具,通过它,可以方便的操作存储在MySQL Server中的数据。
2.2 MySQL在 Mac 环境下的安装
在Mac环境下安装 MySQL的过程比 Windows环境下的步骤简单很多:
1.先运行 mysql-8.0.19-macos10.15-x86_64.dmg这个安装包,将MySQL Server安装到 Mac系统
2.再运行 mysql-workbench-community-8.0.19-macos-x86_64.dmg这个安装包,将可视化的MySQLWorkbench工具安装到 Mac系统
2.3 MySQL在 Windows环境下的安装
在Windows 环境下安装MySQL,只需要运行mysql-installer-community-8.0.19.0.msi这个安装包,就能一次性将MySQL Server和MySQL Workbench安装到自己的电脑上。
3.【MySQL的基本使用】
3.1 使用MySQL Workbench 管理数据库
连接数据库
了解主界面的组成部分
创建数据库
创建数据表
DataType数据类型: 字段的特殊标识:
1. int 整数 1.PK (Primary Key) 主键、唯一标识
2. varchar(len) 字符串 2.NN (Not Null) 值不允许为空
3. tinyint(1) 布尔值 3.UQ (Unique) 值唯一
4.Al (Auto lncrement) 值自动增长
向表中写入数据
3.2 使用SQL管理数据库
什么是 SQL
SQL(英文全称: Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
三个关键点:
1.SQL是一门数据库编程语言
2.使用SQL语言编写出来的代码,叫做SQL语句
3.SQL语言只能在关系型数据库中使用(例如MySQL、Oracle、SQL Server)。非关系型数据库(例如Mongodb)
不支持SQL语言
SQL能做什么
1.从数据库中查询数据
2.向数据库中插入新的数据
3.更新数据库中的数据
4.从数据库删除数据
5.可以创建新数据库
6.可在数据库中创建新表
7.可在数据库中创建存储过程、视图......
SQL的学习目标
重点掌握如何使用SQL从数据表中:
查询数据(select)、插入数据(insert into)、更新数据(update) 、删除数据(delete)
额外需要掌握的4种SQL语法:
where 条件、and 和 or 运算符、order by 排序、count(*) 函数
3.3 SQL 的SELECT 语句
语法
SELECT语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集)。语法格式如下:
--这是注释
--从 FROM 指定的【表中】,查询出【所有的】数据。* 表示【所有列】
SELECT * FROM 表名称
--从 FROM 指定的【表中】,查询出指定列名称(字段)的数据。
SELECT 列名称 FROM 表名称
SELECT * 示例
我们希望从users表中选取所有的列,可以使用符号 * 取代列的名称,示例如下:
SELECT 列名称 示例
如需获取名为"username”和"password"的列的内容(从名为"users"的数据库表),请使用下面的SELECT语句:
3.4 SQL的INSERT INTO语句
语法
INSERT INTO语句用于向数据表中插入新的数据行,语法格式如下:
--语法解读:向指定的表中,插入如下几列数据,列的值通过values ———指定
--注意:列和值要——对应,多个列和多个值之间,使用英文的逗号分隔
INSERT INTO table_name (列1,列2,...) VALUES((值1,值2,....)
INSERT INTO 示例
向users 表中,插入一条username为tony stark,password 为098123的用户数据,示例如下:
3.5 SQL 的 UPDATE 语句
语法
Update语句用于修改表中的数据。语法格式如下:
--语法解读:
--1.用UPDATE指定要更新哪个表中的数据
--2.用SET指定列对应的新值
--3.用WHERE指定更新的条件
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE示例 – 更新某一行中的一个列
把users表中 id 为 7 的用户密码,更新为 888888。示例如下:
UPDATE示例–更新某一行中的若干列
把users 表中 id 为 2 的用户密码和用户状态,分别更新为 admin123 和 1 。示例如下:
3.6 SQL的DELETE 语句
语法
DELETE语句用于删除表中的行。语法格式如下:
--语法解读:
--从指定的表中,根据WHERE条件,删除对应的数据行
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE 示例
从users表中,删除 id 为 4 的用户,示例如下:
3.7 SQL 的 WHERE 子句
语法
WHERE子句用于限定选择的标准。在SELECT、UPDATE、DELETE语句中,皆可使用WHERE子句来限定选择的标准。
--查询语句中的 WHERE 条件
SELECT 列名称 FROM 表名称W HERE 列 运算符 值
--更新语句中的 WHERE 条件
UPDATE 表名称 SET 列=新值 WHERE 列 运算符 值
--删除语句中的`wHERE条件
DELETE FROM 表名称 WHERE 列 运算符 值
可在WHERE子句中使用的运算符
下面的运算符可在 WHERE子句中使用,用来限定选择的标准:
WHERE子句示例
可以通过WHERE子句来限定SELECT的查询条件:
--查询 status 为 1 的所有用户
SELECT * FROM users WHERE status=1
--查询 id 大于 2 的所有用户
SELECT * FROM users WHERE id>2
--查询 username 不等于 admin 的所有用户
SELECT * FROM users WHERE username <> 'admin'
3.8 SQL 的 AND 和 OR 运算符
语法
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
AND 表示必须同时满足多个条件,相当于JavaScript 中的&&运算符,例如if (a !== 10 && a !== 20)
OR 表示只要满足任意一个条件即可,相当于JavaScript 中的运算符,例如if(a !== 10 || a !== 20)
AND 运算符示例
使用 AND 来显示所有 status 为 0,并且 id 小于3 的用户:
OR运算符示例
使用 OR 来显示所有 status 为 1 ,或者 username 为 zs 的用户:
3.9 SQL 的 ORDER BY 子句
语法
ORDER BY语句用于根据指定的列对结果集进行排序。
ORDER BY语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
ORDER BY子句-升序排序
对 users 表中的数据,按照 status 字段进行升序排序,示例如下:
ORDER BY子句-降序排序
对 users 表中的数据,按照 id 字段进行降序排序,示例如下:
ORDER BY子句-多重排序
对users 表中的数据,先按照 status 字段进行降序排序,再按照 username 的字母顺序,进行升序排序,示例如下:
3.10 SQL的COUNT(*)函数
语法
COUNT(*)函数用于返回查询结果的总数据条数,语法格式如下:
SELECT COUNT(*) FROM 表名称
COUNT(*)示例
查询 users 表中 status 为 0 的总数据条数:
使用AS为列设置别名
如果希望给查询出来的列名称设置别名,可以使用 AS 关键字,示例如下:
4.2 【在项目中操作 MySQL 】
4.1 在项目中操作数据库的步骤
1.安装操作 MySQL 数据库的第三方模块(mysql)
2.通过 mysql 模块连接到 MySQL 数据库
3.通过 mysql 模块执行SQL语句
4.2 安装与配置mysql模块
安装mysql模块
mysql模块是托管于 npm 上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。
想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:
npm install mysqlnpm i mysql
配置mysql模块
在使用mysql模块操作MySQL数据库之前,必须先对 mysql模块进行必要的配置,主要的配置步骤如下:;
// 1.导入mysql模块
const mysql = require('mysql')
// 2.建立与 MySQL 数据库的连接
const db = mysql.createPool({// 数据库的IP地址host: '127.0.0.1', //登录数据库的账号user: 'root' ,//登录数据库的密码password: 'admin123',//指定要操作哪个数据库database: 'my_db_01'
})
测试 mysql模块能否正常工作
调用 db.query() 函数,指定要执行的 SQL 语句,通过回调函数拿到执行的结果:
//检测mysql模块能否正常工作
db.query('select 1',(err, results) => {// mysql 模块工作期间报错了if (err) return console.log(err.message)//只要能打印出 [ RowDataPacket {'1':1}] 的结果,就证明数据库连接正常console.log(results)
})
4.3 使用mysql模块操作MySQL数据库
查询数据
查询 users 表中所有的数据:
// 查询users表中所有的用户数据
const sqlStr = 'select * from users'
db.query(sqlStr, (err, results) => {// 查询失败if (err) return console.log(err.message)// 查询成功// 注意:如果执行的是 select 查询语句,则执行的结果是数组console.log(results)
})
插入数据
向 users 表中新增数据,其中 username 为 Spider-Man,password 为 pcc321。示例代码如下:
// 1.要插入到users表中的数据对象
const user = { username: 'Spider-Man ', password: 'pcc321' }
// 2.待执行的SQL语句,其中英文的 ? 表示占位符
const sqlStr = 'insert into users (username,password) values (?,?)'
// 3.使用数组的形式,依次为 ? 占位符指定具体的值
db.query(sqlStr,[user.username,user.password],(err,results) =>{// 失败if (err) return console.log(err.message)// 成功if(results.affectedRows === 1) { console.log('插入数据成功')}
})
插入数据的便捷方式
向表中新增数据时,如果数据对象的每个属性和数据表的字段一 一对应,则可以通过如下方式快速插入数据:
// 1.要插入到users表中的数据对象
const user = { username: 'Spider-Man2 ', password: 'pcc4321'}
// 2.待执行的SQL语句,其中英文的 ? 表示占位符
const sqlStr = 'insert into users set ?'
// 3.直接将数据对象当作占位符的值
db.query(sqlStr, user,(err, results) => {//失败if (err) return console.log(err.message)//成功if(results.affectedRows === 1) { console.log('插入数据成功')}
})
更新数据
可以通过如下方式,更新表中的数据:
// 1.要更新的数据对象
const user = { id: 7, username: 'aaa', password: '000'}
// 2. 要执行的SQL语句
const sqlStr= 'update users set username=?, password=? WHERE id=?'
// 3.调用 db.query() 执行 SQL 语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[user.username,user.password,user.id],(err,results) => {//失败if (err) return console.log(err.message)//成功//注意:执行了 update 语句之后,执行的结果,也是一个对象,可以通过 affecEledRows 判断是否更新成功if (results.affectedRows === 1) { console.log('更新数据成功!')}
})
更新数据的便捷方式
更新表数据时,如果数据对象的每个属性和数据表的字段一 一对应,则可以通过如下方式快速更新表数据:
// 1.要更新的数据对象
const user = { id: 7,username: 'aaaa', password:'0000'}
// 2.要执行的 SQL 语句
const sqlStr = 'update users set ? where id=?'
// 3.调用 db.query() 执行 SQL 语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[user,user,id],(err,results) => {// 失败if (err) return console.log(err.message)// 成功 if (results.affectedRows === 1) { console.log('更新数据成功!')}
})
删除数据
在删除数据时,推荐根据 id 这样的唯一标识,来删除对应的数据。示例如下:
// 1.要执行的SQL语句
const sqlStr = 'delete from users where id=?'
// 2.调用 db.query() 执行 SQL 语句的同时,为占位符指定具体的值
// 注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
// 如果SQL语句中只有一个占位符,则可以省略数组
db.query(sqlStr,7, (err,results) => {// 失败 if (err) return console.log(err.message)// 成功if (results.affectedRows =-= 1) { console.log('删除数据成功!')}
})
标记删除
使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于 status 这样的状态字段,来标记当前这条数据是否被删除。当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的 status 字段标记为删除即可。
// 标记删除:使用UPDATE语句替代 DELETE语句;只更新数据的状态,并没有真正删除
db.query('update users set status=1 where id=?',6,(err,results)=> {// 失败 if (err) return console.log(err.message)//成功 if (results.affectedRows === 1) { console.log('删除数据成功!')}
})
Node.js笔记--Day5相关推荐
- Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)
文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常 ...
- node.js笔记第一天
nodejs笔记 web服务器和服务端js的区别 1.js都是运行在浏览器的 ECMAScript:js语法 bom:浏览器对象模型,用js去操作浏览器窗口 Dom:文档对象模型,用js去操作dom树 ...
- Node.js 笔记 http服务器
入门学习参考: http://www.nodebeginner.org/index-zh-cn.html#javascript-and-nodejs 初步学习了node.js架设http的基础知识,其 ...
- Node.js 笔记01
一.Node.js 前言 1.node.js 之父 Ryan Dahl(瑞安达尔) ,技术好,颜值高! 数学系博士, 中途退学, 为了生活, 学习了Ruby On Rails接Web项目, 经过两年成 ...
- Node.js笔记-node.js连接MySQL与增删改查
最近在看一个开源项目,项目用的是node.js,在此学习下他的连接mysql与增删改查. 安卓mysql包: npm install mysql 程序运行截图如下: D:\node\content\n ...
- 【笔记整理】node.js笔记
第一天: - Node.js 是什么 + JavaScript 运行时 + 既不是语言,也不是框架,它是一个平台 - Node.js 中的 JavaScript + 没有 BOM.DOM ...
- 学习Node.js笔记
什么是Node.js 官方解释: Node.js 是一个基于 Chrome V8引擎的 JavaScript运行环境.Node.js使用了一个事件驱动.非阻塞式I/O的模型( Node.js的特性), ...
- Node.js笔记:SerialPort(串口)模块使用(基于10.x.x)
文章目录 目的 模块安装 快速使用 模块导入 扫描端口 打开端口 发送数据 接收数据 错误处理 SerialPort更多说明 构造方法 属性 事件 方法 数据解析器 命令行工具 在Electron渲染 ...
- 《深入浅出 node.js 笔记》 - part3
相关链接 github 更多文章 推荐 在线阅读 文章目录 相关链接 第 8 章 构建 Web 应用 Cookie Cookie 的性能影响: Session 缓存 清除缓存 MVC RESTFUL ...
最新文章
- 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC
- vim带你装逼带你飞(一)
- bios文件查看工具_何必花钱升级显卡!AMD鸡血BIOS杀到
- 拖拽功能-jquery
- 简单的python画图代码_python opencv如何实现简易画图板 python opencv实现简易画图板代码...
- 《软件需求分析(第二版)》第 12 章——需求确认 重点部分总结
- 信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码
- python批量更改文件后缀名
- 阿里云服务器开启端口
- PyTorch安装问题解决
- spark保存数据到hbase_Spark读取Hbase中的数据
- win10电脑桌面图标不见了怎么办
- 各种操作系统中密码文件的位置
- H3C设备通过oid获取光衰
- C语言程序static改错题,2014计算机二级C语言程序设计全真测试题
- 论文阅读|Cascade R-CNN
- Office2016装Mathtype找不到WLL
- sci四区大水刊 计算机,sci四区大水刊_sci四区免费大水刊_sci四区什么水平
- 360cdn能挡住cc攻击_如何合理利用CDN来防御部分恶意刷量和CC攻击
- 湖南大学计算机学硕推免率,好几个帖子都在讨论清北华五的推免生源我来发一下b类大学湖大今...