Spring框架基础
关系型数据库、SQl、MySQL、Redis
SQL、MySQL、Redis这三块的东西太多了,课件很多东西只讲了皮毛,倒是放了很多视频、博客链接+推荐书籍(很多学长倾力推荐的
- SQL:《必知必会SQL》、很多讲MySQL的视频会连带讲SQL用法
- MySQL:尚硅谷MySQL视频(巨细)、黑马MySQL视频(黑马尚硅谷选一个看即可)、MySQL45讲(极客时间)、《MySQL技术内幕:InnoDB存储引擎》
- Redis:黑马Redis视频、《Redis设计与实现》
时间和知识有限,大家目前对这一块的要求就是会用常用的SQL语句操作MySQL,知道MySQL、Redis是拿来干嘛的
关系型数据库
讲到MySQL,它是一种关系型数据库(基于关系模型的数据库,它通过表格的形式存储和管理数据
以下是我们了解关系型数据库的一些必知必会的新概念:
数据库(Database)可以理解是一种特殊格式的数据文件
- 数据以一种特殊组织形式的二进制格式存储在数据库中
数据库管理系统(Database Management System)是对数据库进行管理的一组软件系统
结构化查询语言(Struct Query Language,SQL),是一种允许我们在关系型数据库系统上查询和操作数据的语言
开发者通过SQL -> 数据库管理系统 -> 操作系统 -> 数据库(文件)
关键术语:
表:也称关系表,表是数据库中存储数据的组织形式
字段:即表中的列,也称为属性
记录:即表中的行,一行数据称为一条记录
NULL值:null表示不存在的值,或暂时未知的值
- null不是空字符串
- null与其他值进行运算,结果总为null
键:
超键:能唯一标识记录的属性集
候选键:属于超键,是不含多余属性的超键,是最小的超键
主键:属于候选键,能唯一标识记录的一个字段或者多个字段的组合
- 主键是唯一的
- 主键不能为null
唯一键:一个或多个字段的集合,唯一标识数据库表中的数据
- 防止列中的复制值
- 列中只能有一个null
- 一个表中可以有多个唯一键
外键:建立与其他表的联系,一个表中的某些字段是另外表的主键或唯一键,这些字段称为外键
外键可以为null
外键也可以是本表的原有字段
视图:
- 视图就是把查询存放成数据库的一个对象,即视图对象
- 视图是一个虚表,不存储具体的数据,因此一旦基本表中的数据发生变化,从视图查询出的数据也随之改变了
- 视图是采用select语句来构造的,在当一个视图的时候,只是把其定义存放在系统的数据字典中,直到用户使用视图时才去求对应的数据
- 视图只保存了查询的SQL逻辑,不保存查询结果
触发器:
- 触发器是存储在数据库中的一组SQL语句,每当与表相关联的事件发生时,就会触发SQL执行,例如:增,删,改
- 触发器是与表相关的命名数据库对象,每当表上出现特定事件时,将激活该对象
- 触发器由数据库系统自动执行,无需程序员手动调用
- 优点:
- 帮助记录操作日志‘
- 对操作前进行数据合法性检验
- 缺点:
- 可读性差
- 增加性能开销
存储过程:
- 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。并在数据库内执行
- 是一组为了完成特定功能的SQL集合
- 经编译以后保存在数据库中
- 可带参数,也可返回结果
数据库设计:
ER模型:
- 实体(Entity),关系(Relationship)
- 实体:将现实世界事务特征抽象为数据库表,一个表就是一个实体
- 数据库中实体之间的关系通过外键来关联
设计范式:
第一范式:
表中的字段是原子的,不可分割的
第二范式:
表中要有主键
第三范式:
消除部份依赖和传递依赖
索引:
索引概念:
通过数据库索引,可以快速的检索到记录在磁盘中的具体位置
当表中的数据非常多时,可以使用索引来提高查询数据的效率
数据库索引的最主要作用是为了提高查询性能
概念:
- 索引是对数据表中一列或多列的值进行排序的一种结构,可提高待定数据的查询速度
- 索引是一个单独的、存储在磁盘上的数控结构文件,包含着数据表中所有记录的引用指针
索引作用:
- 索引中的属性值必须有序,则可以通过二分查找的方式快速定位到数据文件的磁盘地址
- 如果没有索引,查询将会全表扫描,导致性能急速下降
索引物理结构划分:
索引可分为:
- 顺序索引
- B树索引
- 哈希索引
商用数据库的索引主要是后两者
事务:
简单理解:一组SQL在事务中执行,要么全部成功,要么全部失败
事务是一个逻辑工作单元,有四个特性
ACID特性:
原子性(Atomicity):
事务是一个原子操作,不可分割,要么全部成功,要么全部失败,部分失败会回滚
一致性(Consistency):
事物的执行必须使数据库从一个一致状态转换到另一个状态。这意味着事务必须满足所有约束条件,以保持数据的完整性和一致性
隔离性(Isolation):并发事务的执行不能相互干扰
持久性(Durability):一旦事务完成提交,其结果就是永久性的
SQL:
前面我们说到要用SQL去操作关系型数据库
详细操作可以看一下**《必知必会SQL》**
我们常听说的后端工程师是CRUD工程师,是跟数据打交道的
那么CRUD是什么呢?
CRUD即Create(新增)、Read(读取)、(Update)更新、(Delete)删除
SQL语句用法很多,时间有限,我们今天只讲最常用的增删改查操作
- 登录mysql
| |
- 查看所有数据库
| |
- 创建我们这节课的数据库lesson5
| |
- 使用某个库
| |
- 查看库的所有表
| |
- 创建表student
| |
- 查看表student
| |
好了前戏做完了,我们来对这张表做CRUD:
查询
student表中的数据(SELECT):sql
| |
或者查询特定的列:
sql
| |
插入数据到
student表中(INSERT):sql
| |
更新
student表中的数据(UPDATE):sql
| |
删除
student表中的数据(DELETE):sql
| |
MySQL:
mysql 、redis这些都是工具,我们需要学会的是怎么玩它,玩的顺心
在我们日常项目开发中,会用到ORM框架去操作数据库
常见的ORM框架:Mybatis(最重要,最常用,大多公司里会采用的)、MybatisPlus(开发便捷,不宜维护,个人项目开发可用)
贴个链接,想看自己看 https://blog.csdn.net/2302_80742310/article/details/139234954?spm=1001.2014.3001.5502
但会用也不够,还要懂得其中的原理
| |
通过这条命令,我们得以看到MySQL软件自带的数据库
有4个数据库是属于MySQL自带的系统数据库:
mysql MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等
information_schema MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以innodb_sys 开头的表,用于表示内部系统表。
performance_schema MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来 监控 MySQL 服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。
sys MySQL 系统自带的数据库,这个数据库主要是通过 视图 的形式把 information_schema 和performance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。
索引、事务、日志原理、InnoDB、引擎、锁、MVCC
这些是MySQL中需要重点了解的原理、也是以后简历上放的东西
有空下来自己学
Redis:
简介
Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,其有以下特点。
- Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快
- Redis使用的是非阻塞 IO,IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
- Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
- Redis存储结构多样化,不同的数据结构对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
- Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。
上面我们了解了关系型数据库MySQL,现在轮到了非关系型据库(NoSQL)**Redis ** 。
NoSQL= Not Only SQL (不仅仅是SQL)泛指非关系型数据库
那什么是关系型数据库,什么是非关系型数据库呢❔
关系型据库:关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织,其遵循ACID原则
优点: 1、易于维护:都是使用表结构,格式一致;2、使用方便:有通用的SQL语言;3、支持复杂操作:多个表之间做繁杂的查询。 缺点: 1、读写性能比较差,尤其是海量数据的高效率读写;2、固定的表结构,灵活度稍欠;3、高并发读写有IO瓶颈。
常见的有 MySQL/Oracle/SQL Server/Sqlite/TiDB/PostgreSQL/MariaDB
非关系型据库:
一般 除了主流的关系型数据库外的数据库,都认为是非关系型。
优点: 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式。2、速度快:NoSQL可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;3、高扩展性;4、成本低。
缺点: 1、一般而言没有太强的事务处理;2、数据结构相对复杂,复杂查询方面稍欠。
常见的有 Redis / HBase /MongoDB /CouchDB /Neo4J
数据结构:
数据结构:https://juejin.cn/post/7392071148752388148?searchId=20241201150826602A15607606B84B2444、
我是看《Redis设计与实现》和黑马Redis来学的这个redis数据结构
命令
https://juejin.cn/post/7270114845402660903?searchId=2024120115195842E7CDE2922B79529C57 命令较MySQL简单,自己下来看
缓存三兄弟、IO模型:
缓存穿透:请求的数据在数据库和缓存中都不存在,这样的请求永远打到数据库上
缓存击穿:某个热点key缓存突然失效,导致大量请求瞬间打到数据库
缓存雪崩:大量key同时失效,或redis宕机,导致大量请求打到数据库
三种缓存问题的解决方案大家下来学习,黑马Redis也在用代码进行讲解
IO模型https://zhuanlan.zhihu.com/p/614204046
蛮有意思的,有空下来看
实现功能
后面大家做项目来实现功能的时候,如果遇到以下场景,可用想到Redis:
缓存(建议)
消息队列(不建议)
延迟消息(不建议)
排行榜(建议)
计数器(建议)
分布式ID(可以)
分布式锁(建议)
地理位置应用(建议)
分布式限流(可以)
分布式Session(建议)
布隆过滤器(建议)
bitmap状态统计(可以)
共同关注(建议)
推荐关注(可以)