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
序号关键字作用
1from找表
2on关联条件筛选
3join关联表操作
4where条件筛选
5group by分组
6avg,sum…执行函数
7having分组后筛选
8select查询
9distinct去重
10order by排序
11limit分页
MySQL数据库基础1207
https://fuwari.cbba.top/posts/mysql数据库基础1207/
作者
Chen_Feng
发布于
2023-12-07
许可协议
CC BY-NC-SA 4.0