1、数据库基本知识介绍
功能:存储大量的数据,查询数据
数据库排名:https://db-engines.com/en/ranking/relational+dbms
设计模型:E-R设计模型,关系型数据库使用的都是该模型,不同的是核心代码的存储方式和读取方式。E指的是实体,R指的是关系
ER模型中的实体对应数据库中的一张表,而关系指的是两个实体之间的关系:一对一、一对多、多对多。
三范式:简单来说就是设计数据库时候的一些规范
第一范式1NF:列不可拆分
第二范式2NF:唯一标识
第三范式3NF:引用主键
数据完整性指的是数据的正确性,常用的是数据类型检查和其他约束
数据类型
int 指的是整数
decimal(m,n) #m指的是一共m位,小数n位
test 适用于文本,字符串比较多的场景
char(m) 固定长度,用于存储手机号码等固定长度的数据,指定m个字符,若不够不全
varchar(m) 可变长度,用于存储长度不固定的数据
datetime #指的是日期和时间
bit(m) #8位 使用场景:存储性别【两种状态】,内存开销小。如0表示女,1表示男
【注】创建数据库设置编码格式
其他约束,如下
主键决定物理存储方式,唯一标识。通过主键能快速找到一张表中的数据
唯一可以有很多,但是主键只有一个。
2、mysql图形可视化界面操作
以mysql可视化工具Workbench为例,讲这个的目的是要求在图形化界面可以做一些基本的操作
当mysql安装成功后,且mysql服务启动后,打开可视化界面就连接数据库
常用操作
创建数据库:
编码选择utf-8【CREATE SCHEMA `test02` DEFAULT CHARACTER SET utf8 ;】
创建表
选中tables,右键创建表
设计表:设置表的字段
给表中添加数据、修改数据
3、windows下打开命令行操作mysql
首先要知道mysql安装路径
然后shift+右键,在此处打开命令行
也可以在windows开始快速打开
常用操作
查询数据库版本:
查看当前时间
创建数据库
删除数据库
切换数据库
查询当前所有的数据库
查看当前所有表
查看当前数据库
创建表
查询表的结构
修改表
add是增加,change是修改,drop是删除
更改表名和查看表的创建语句
简单查询表数据
插入一条数据
全列插入,操作如下
缺省插入,操作如下
其他
数据修改、更新操作
操作如下
删除一条数据
【注】这里讲一下逻辑删除和物理删除,物理删除就是用delete语句删除一行,逻辑删除就是设计表结构的时候增加一个删除标记位isdelete,用户删除的时候使用update语句设置标志位是0。查询所有表数据的时候使用where条件语句
数据备份与恢复
linux下数据库备份
数据恢复
首先要创建数据库,然后执行恢复操作
4、数据库查询语句详解
查询的基本用法
操作如下:
消除重复行,distinct【比较的时候是看一行】
where后面增加条件
where后面的条件会对表中的每一行进行过滤,最后返回结果集
逻辑运算符【与、或、非】
模糊查询
操作如下
范围查询
操作如下
【注】:有多个and的时候,从左到右进行匹配,逻辑运算符and优先级低,所以先匹配between
空判断
【注】null表示空,不占用内存。判断的时候不能用=判断
where后面条件运算符的优先级,这些运算符包括条件运算符、逻辑运算符、范围运算符、模糊运算符、判空运算符
聚合
聚合的核心是为了统计,对多行数据进行统计,统计之后看不到原始的数据,得到的是一个聚合后的结果
常用的聚合函数如下
【注】求最大值max、最小值min、平均数avg、求和sum要求计算的列一般是数字类型。
聚合函数是无法得到原始数据,但是我们可以通过其他手段获取,如通过子查询
分组
分组是为了聚合,怎么理解呢?分组将相同属性的分到不同组,然后对此做聚合操作,统计出不同组内的数据
执行顺序:首先from语句从后面的表名获取原始数据集
然后执行where后面的条件筛选,返回经过过滤处理的结果集
再进行分组group by,返回经过分组处理的数据
在分组处理having,对分组后的结果进行处理
最后显示结果
排序
分页
实例如下
结合排序order by,先对原始数据进行排序,然后再按照索引取数据
实际应用
完整的select语句
5、高级内容
主要内容:关系、连接查询、自关联、视图、索引、事物
详解关系
首先关系在上文中说了是指的实体之间的关系,在项目中我们要设计表,要明确表之间的关系。这里就需要提到上文说到的E-R模型。比如下面的三张表
首先三个表(实体)之间的关系,成绩表中用到学生和科目信息,学生和科目这两列根据第三范式引用主键要求是引用的另外两个表中的主键,而不是自己维护,这两个列就是关系列【关系字段】。这两个信息分别在学生表和科目表中维护。
关系分析
f学生表和成绩表是关系是一对多
科目表和成绩表是关系是一对多
【注】怎么看关系是不是一对多,分析A表中的一行对应B表中多行。
存储关系
若两个表是一对一的关系,那么关系字段在两个表都可以
若两个表是一对多的关系,那么关系字段在多对应的表中
若两个表是对多对多的关系,需要另外建立一张表存储关系字段
关系设计的注意不要设置成闭合,这样会导致存储冗余
如上图需要把关系打开,实际使用中实际考虑
关系字段
外键用来保证关系字段的正确和有效性
插入数据会检查
外键的级联操作
【注】设计过程中是先确定ER模型,然后设计表结构确定关系列,最后创建表添加外键
连接查询join
当对多个有关系的表进行查询的,既想要的结果来自于多个表考虑连接查询
多表查询
内连接要求多个表的数据都出现才会显示结果,这个时候是不分表的顺序的
左连接,以左表中数据为准
右连接,以右表为准
确定实体间是否有关系
确定是几对几的关系
确定在哪个实体之间建立关系字段
连接查询:首先连接有三种情况,内连接、左连接、右连接,详细上文已经介绍过了。返回的结果是多个表联合查询到的数据。但是实际情况下,我们不需要所有数据。所以一般会在这之上添加过滤条件,就是SQL查询讲到的内容。进行分组、聚合、分页等高级操作
练习
自查询
这种场景下表1和2数据量很小,但是建立一张表的开销是很大的,这个时候会造成性能浪费
自关联
自连接查询
首先自连接是指的本表和本表进行连接join。在物理上他们是一张表,但是逻辑上我们可以认为它们是两张表。如下,为了美观和正确显示,查询的时候用了别名
视图:怎么理解视图呢,简单来说可以说是生成一个新的表结构,这个表存放select语句生成的结果集。
对select语句进行封装
修改视图alter
事物简单介绍
事物开始与提交
事物开始与回滚begin和rollback
beigin后面的修改操作【增加、删除、更新】会修改内存层面的数据,但是物理上不变
索引的简单介绍
选择的数据类型
索引操作
性能检测set profiling=1
创建索引再执行查找动作
性能检测工具查出来时间明显减少
【注】主键和外键默认就是索引
缺点