1539 字
8 分钟
MySQL数据库基础1207
char和varchar的区别
- char:
- 固定长度
- 最大255字节
- 数据长度不足时,会在尾部填充空格,查询时会自动去掉空格
- 效率高,占空间
- varchar:
- 长度可变
- 最大可设置65535字节
varchar(10) 和 varchar(20) 的区别
- 它们的主要区别是,能够存储的最大字节数不同
- 前者表示该列最多可以存10个字节,后者表示该列最多可以存储20个字节,它们占用的存储空间会根据实际存储的==字节数==动态调整
- 值得注意的是,有些编码中,字符长度不止一个字节
- 例如,使用UTF-8编码时,向varchar(10)中存储5个汉字(每个汉字占3字节),那么实际存储的字节数是15字节,超过了varchar(10)的指定长度
drop、truncate与delete的区别
- drop:删除==整张表==,包括==数据==和==结构==,属于DDL,不能回滚
- truncate:清空表中数据,速度快,属于DDL,不能回滚
- delete:删除表中部分或全部数据,逐行删除,速度慢,属于DML,可以回滚
- 速度:drop>truncate>delete
UNION与UNION ALL的区别
- UNION和UNION ALL用于 ==合并多个查询结果集==
- UNION在合并时会去除重复的行,而UNION ALL不去重
- 去重就会有额外的性能开销,导致UNION的效率要低于UNION ALL
MySQL 的内连接、左连接、右连接有什么区别
连接查询
- 从多个表中获取数据,假如从两张表中查询,结果总数是两张表匹配行的乘积,即查询结果的数量是笛卡尔积
内连接
- 内连接的概念:基于两个或多个表之间的==匹配条件==,将它们的行组合起来,形成一个==结果集==
- 内连接的分类:
- 等值连接:连接条件是相等判断
- 非等值连接:连接条件不是相等判断
- 自连接:在同一张表中进行连接操作
- 自连接是一种特殊的连接查询,它指相互连接的表,在物理上是同一张表,在逻辑上是两张不同的表
外连接
- 外连接的概念:在多个表之间进行连接查询,可以包括未匹配的行
- 外连接的查询结果条数 >= 内连接的查询结果条数
- 外连接的分类:
- 左外连接(LEFT JOIN):返回左表中的所有行和右表中的匹配行;如果右表中没有匹配行,则返回NULL
- 右外连接(RIGHT JOIN):返回右表中的所有行和左表中的匹配行;如果左表中没有匹配行,则返回NULL
- 全外连接(FULL JOIN):返回左表和右表中的所有行,如果有一个表中没有匹配行,则返回NULL
常见的聚合函数有哪些?使用聚合函数需要注意什么
-
max(expression):返回某列的最大值
-
min(expression):返回某列的最小值
-
avg(expression):返回某列的平均值
-
sum(expression):返回某列值的和
-
count(expression):返回某列的行数
注意:
- 聚合函数会自动的忽略空值,不需要手动增加条件排除NULL
- 聚合函数不能作为 where 子句后的==限制条件==
请说下你对 MySQL架构的了解
- Server层包括:
- 连接器:连接客户端,获取权限,管理连接
- 查询缓存:在一个查询语句中,会先到缓存中查看之前是否查询过这条语句(如果开启了查询缓存功能):若存在则直接返回缓存的结果,优点是命中缓存时效率很高,缺点是缓存失效非常频繁,只要有对一个表的更新,该表所有的查询缓存都会被清空,==MySQL8.0== 版本已删除了查询缓存功能
- 分析器:对 SQL 语句进行==词法分析==和==语法分析==,判断语句是否==合法==
- 优化器:对SQL语句进行==优化==,选择==索引==
- 执行器:==调用==存储引擎==接口==,返回结果
- 存储引擎层负责的工作:数据的==存储==和==提取==,其架构是插件式的,支持 InnoDB MyISAM 等多个存储引擎。从MySql 5.5.5 版本开始默认的是 InnoDB,但是在建表时可以通过 engine = MyISAM 来指定存储引擎。不同存储引擎数据的存取方式不同,支持的功能也不同。
一条 SQL 语句在数据库框架中的执行流程
- 词法分析、语法分析
- 查询优化
- 执行计划生成
- 数据获取和处理
- 返回结果
数据库的三范式是什么
- 概括一下范式:是关系型数据的一种==设计规范==
- 目的:
- 减少数据冗余
- 提高数据一致性
- 期望:提升数据存储和使用的==性能==
- 目的:
- 第一范式(1NF):确保每列原子性,即每个字段不可再分
- 不满足第一范式的数据库不是关系型数据库
- 第二范式(2NF):确保唯一性和依赖性
- 唯一性:每个表都有主键
- 依赖性:其他字段完全依赖主键
- 第三范式(3NF):确保消除传递依赖,即非主键字段必须直接依赖主键,不能传递依赖
什么是范式和反范式,以及各自优缺点
- 概括一下范式:
- 目的:
- 期望:
- 概括一下反范式:与范式相反的设计规范
- 目的:增加数据冗余
- 期望:
- 提高查询==性能==
- 简化查询操作
limit 1000000,10加载很慢,怎么解决
- 从100万条取10条,要查询100万条,最后取10条,所以慢
- 解决方法:
- 分页加载:
- 将大结果集分成小的结果集,比如limit 20,10
- 分页加载:
一条SQL查询语句的顺序
- 书写顺序:select distinct | from join on | where group by having | order by limit
- 执行顺序:from on join where group by having select distinct order by limit
序号 | 关键字 | 作用 |
---|---|---|
1 | from | 找表 |
2 | on | 关联条件筛选 |
3 | join | 关联表操作 |
4 | where | 条件筛选 |
5 | group by | 分组 |
6 | avg,sum… | 执行函数 |
7 | having | 分组后筛选 |
8 | select | 查询 |
9 | distinct | 去重 |
10 | order by | 排序 |
11 | limit | 分页 |
MySQL数据库基础1207
https://fuwari.cbba.top/posts/mysql数据库基础1207/