Nodejs 第三十二章 数据库基本介绍
什么是MySQL数据库
MySQL是一种开源的关系型数据库
管理系统(RDBMS),它是最受欢迎的数据库系统之一。MySQL广泛用于Web应用程序和其他需要可靠数据存储的应用程序中
数据库的出现解决了什么问题?
-
数据库的优点很多,从谷歌上都能搜索到一堆非常官方的话术。坦白的说,第一次看可能看不明白,那我们这里就以简要的话来介绍他
- 在我们前面Node的编写接口中,客户端发送请求的时候,如果是POST之类的请求还会额外携带一些内容传递过来。在数量的累计下,这些数据量也会有一定的规模
-
那我们要拿这些数据怎么办?难道就直接找个文件就塞进去存起来吗?
- 我们需要知道,文件的读写效率是很低的,当数据量上来了,再想查询数据内容就非常的慢了
- 此时数据库就当仁不让的站出来了,你用户的信息通通可以使用数据库存起来。数据库这个名字顾名之义就是
存储数据的仓库
,它的效率就很高了,能够完美解决我们的问题
-
那完整的流程就是前端提交数据给后端,后端拿到数据后,通过sql语句把数据插入数据库里
- 而增删改查的逻辑都是一样的,前端发出请求,后端调用对应的sql语句在数据库里面倒腾,完成对应的功能
社区支持和资源丰富
MySQL 的开源属性意味着它背后有一个庞大的开发和用户社区。这为用户提供了丰富的资源、工具和支持,帮助他们解决问题并最大化数据库的使用效果。
常用数据库
数据库主要分为关系型数据库和非关系型数据库两大类,我们这里就简要提及几个
关系型数据库
- MySQL:最受欢迎的开源关系型数据库之一,广泛用于网站和服务器应用。支持复杂的查询语言SQL,强调数据完整性。
- Oracle Database:高度专业化的商业关系型数据库,支持大规模的数据管理需求,常用于金融和高需求企业环境。只不过这是要钱的
非关系型数据库
- MongoDB:文档导向的NoSQL数据库,以其高性能、高可用性和易扩展性著称,适合处理大规模的非结构化数据。
- Redis:高性能的键值存储数据库,通常用作数据缓存和消息队列,支持数据的持久化和多种数据结构。在B站中,我们也可以看到
什么是关系型数据库
在关系型数据库中,数据以结构化的方式存储,其中每个表格由
一组列(字段
)和一组行(记录)
组成。每个列定义了数据的类型和属性,而每个行则表示一个特定的数据实例。表格之间的关系通过使用主键和外键
进行建立。主键是唯一标识表格中每个行的列,而外键是指向其他表格主键的列,用于建立表格之间的关联关系。
-
上图中这是一个User表,我们通过主键来锁定唯一的内容,因为其他的内容都存在重复的可能。就像我们国家有很多人叫张伟,他们很可能年龄一样,性别一样,甚至所在的城市都一样。但至少他们的身份证是唯一的,而这个主键就像是身份证一样
-
而我们通过关
系型数据库
的初步介绍,知道表与表之间的联系是依靠主键和外键
。现在我们知道了主键,那外键是什么?- 当前表需要用到其他表,其他表的主键相对于当前表是外键,如下图所示就是一个很好的案例
关系型和非关系型的区别
-
数据结构
- 关系型数据库使用严格的表结构,要求预先定义数据模式,适合结构化数据。
- 非关系型数据库采用灵活的数据存储方式,如文档、键值对、列存储,适合半结构化和非结构化数据。
-
扩展性
- 关系型数据库通常通过垂直扩展(增强单个服务器性能)来处理更多数据。
- 非关系型数据库设计以支持水平扩展(增加更多服务器),更适合处理大规模分布式数据。
-
查询和事务处理
- 关系型数据库支持复杂的SQL查询和严格的ACID事务,适合需要复杂查询和事务控制的应用。
- 非关系型数据库的查询功能相对简单,事务支持不如关系型数据库全面,但在处理大数据和实时查询方面更有优势。
-
用途
- 关系型数据库适用于需要高事务一致性和数据完整性的传统业务系统。
- 非关系型数据库适用于需要快速迭代、大规模数据存储、或者灵活的数据模型的现代应用。
安装流程
下载安装包
- 首先我们找到MySQL的官网:MySQL
- 然后点击下载选项
- 往下滑找到社区版进行下载,这个版本已经足够我们使用
- 选择社区服务器
-
我们就进入下载配置的选择中
- 我们选择MSI,因为
MSI
提供更全面的安装和配置管理功能,适合需要完整安装过程的应用程序 - 而Zip就是大家都熟悉的压缩包,更适合到处传来传去的情况(
便携
)
- 我们选择MSI,因为
- 接着就点击开始下载就行了
正式安装
- 打开我们下载下来的压缩包
- 点击同意协议后,我们会进入如下的三选一选项中
- 然后点击install安装静等就OK了
- 安装成功
- 安装好的页面如下:
- 点击下一步,请记住这个地址,等下配置环境变量要用到
- 网络的配置默认不动
- 接下来是设置密码,有一说一,大家的密码不是123456就是root。我真建议大家刚学习别设置复杂了,没有太大的必要
- 配置运行权限
- 是否创建示例数据库
- 更改日志配置
- 更改完成,配置结束。下一步点击右下角
完成
按钮即可
安装检测
-
安装好了之后,我们需要检查一下是否正确安装上了
win+R
打开运行端,输入services.msc
-
此时稍微找下我们刚刚配置MySQL的时候,确定好的端口名
MySQL84
- 也是成功找到了,如果选择手动启动的话,那每次开机的时候,需要通过在这里进行启动服务
配置环境变量
- 首先我们需要找到MySQL文件下的bin目录,这就需要看我们刚才把文件丢哪里了,由于我们是默认配置,所以还是很好找的
- 这个地址复制下来(包括bin目录本身),打开环境变量进行编辑添加即可(打开方式前面有教)
-
最后我们在终端测试一下是否成功
- 终端输入:mysql -uroot -p
jsmysql:这是启动 MySQL 客户端的命令。 -u root:这部分指定了要连接的 MySQL 用户名,这里使用的是 root。-u 是用户(user)的缩写。 -p:这个参数告诉 MySQL 客户端在连接后提示输入密码。-p 是密码(password)的缩写
-
查看库
- 命令:
show databases;
(显示数据库),记得要加分号 - SQL 命令后加分号(
;
)的目的是标示 SQL 语句的结束。你如果不输入分号的话,他会显示回车符号让你继续输入内容
- 命令:
- 不过要这样直接用,可能就不太方便,也不够直观,此时我们需要一点可视化的工具来帮忙
可视化工具安装
- 打开Vscode编辑器的插件商店
- 搜索
database
,安装Database Client
-
点击左侧的database,然后创建连接
- 我们是免费(白嫖)用户,可以连接三个。作为学习来说,也够用
- 上面图中,我们只需要输入密码即可(如果你端口当初安装配置的时候是默认的情况就不需要改)
- 连接成功后,在我们的左侧边栏就能够看到连接的情况
可视化工具的使用
- 通过加号新建数据库
- 这里有一段默认的内容,我们修改一下,创建一个库来试试
- 通过可视化的方式,我们成功创建了一个名为"xiaoyu"的数据库出来
- 此时在通过终端查看下所有的数据库,看是否真的多出了一个名为"xiaoyu"的数据库
- 目前我们新建的数据库里面,一张表都没有,我们创建一个表试一试,还是通过点击加号的方式
-
可视化工具会自动生成一份模板的新建表命令
- 我们对这里面的内容暂时不需要管,通过改动表名来看下是否可以创建,就创建一个用户user表吧
- 成功创建
- 只是说暂时还没内容
- 可视化的操作还是较为简单的,点击左上角的
数据
,里面的黄色+号,即可添加新的内容
- 可视化面板会自动生成对应的SQL语句
- 通过在终端使用
use命令
切入我们新建的数据库中,就可以查看我们的user表
- 命令:
desc user
,即可查看里面的字段,desc是描述说明(查看)的意思
- 命令:
select * from user
,选择来自user表内的所有数据进行查看
-
可视化中的增删改查都非常简单,直接修改然后保存或者删除就OK了。目前这基础使用只是有一个基础印象,不需要记,在后面还会进行详细的讲解
-
最好的话,还是多使用命令而不是可视化。因为可视化也是基于底层的命令实现的。真要进行的话,命令的强大适应性是无以伦比的,在任何情况下都可以使用,对我们阅读理解也更有帮助。
- 所以我们后面都是使用命令来练习
MySQL的主要功能
- 最后留点八股一样的介绍,只需要看看功能都有哪些,有个印象就OK了,不需要背。不理解的话,该忘还是会忘,这只是为了让我们对MySQL的完整功能有一个预估的心理建设
功能 | 描述 |
---|---|
数据存储 | 提供多种存储引擎,如 InnoDB(支持事务处理)和 MyISAM(支持全文搜索)。 |
事务管理 | 支持完整的 ACID(原子性、一致性、隔离性、持久性)事务处理,保证数据的一致性和可靠性。 |
安全性 | 提供基于角色的安全访问控制,支持密码加密和 SSL/TLS 加密连接。 |
高可用性 | 支持数据复制(主从复制和主主复制),确保数据的高可用和容灾。 |
可扩展性 | 通过分区和分片技术支持大数据量的存储和查询,适应高增长的数据需求。 |
性能优化 | 包括查询缓存、索引、全文搜索和优化器提示等多种性能优化机制。 |
灵活的API支持 | 支持多种编程语言的 API,如 PHP、Python、Java、.NET,以及我们等下要用的Node(JS语言)等。 |
工具和集成 | 提供丰富的工具和插件支持,如 MySQL Workbench(数据库设计、管理和开发工具)。 |
跨平台支持 | 可在多种操作系统上运行,包括 Linux、Windows 和 macOS。 |