八股文——MySQL

1.数据库的三大范式?如何理解

  1. 第一范式:确保每列都保持原子性,即数据表中的所有字段值都是不可分解的原子值。
  2. 第二范式:在满足第一范式的基础上,确保每列都和主键相关,也就是说每一行只做一件事。比如订单表,如果包含订单编号,订单货物,联系人,联系人电话,身份证等就是不满足第二范式的。因为如果一个人订多个订单,那么联系人,联系人电话等数据就是重复的,会有数据冗余。正确做法是把联系人,联系人电话,身份证等列拆分为另一个表存放。
  3. 第三范式:确保表中不能存在依赖传递关系,也就是说每列都和主键之间相关而不是间接相关。比如学生表里,有学号,学生姓名,年龄,学院,学院地址等,则学号——学院——学院地址就存在依赖传递关系。整确做法是把学院,学院地址单独拆分一个表。

三大范式只是数据库设计的基本理念,可以减少数据冗余,建立结构合理的数据库。但是实际场景中还是要特殊情况特殊对待,数据库设计最重要的是看需求和性能,需要>性能>表结构,所以不能一味追求范式建立数据库。

2.MySQL常用的存储引擎及区别

  • 事务:InnoDB支持事务,且是事务安全的,myisam不支持,事务不安全。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
  • 锁:  InnoDB支持行级锁,myisam仅支持表级锁。
  • InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
  • 索引:InnoDB是聚族索引,myisam是非聚族索引。InnoDB0使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
  • myisam适用于大量查询的系统,InnoDB适用于大量增删改的系统。

3.B树和B+树的原理和区别

        B树和B+树都是多叉平衡树,

3.一条sql语句的执行过程

大体上来说,MySQL可以分为`Server`层和存储引擎两部分。

1. Server层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数,所有跨存储的功能都在这一层实现,比如存储过程、触发器、视图等。

2. 存储引擎层:负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。

  1.  首先会客户端连接服务器,服务器会进行身份认证,获取权限等操作。
  2.  执行select语句首先或查询缓存,如果缓存中有就直接返回给客户端,如果没有就会经过分析器进行“词法分析”-语法分析“”,经过优化器处理,如果优化器在表里面有多个索引的时候,决定使用哪个索引。最后进入执行器阶段,执行器会首先判断是否对这个表有查询权限,如果没用会返回错误。最后把查询结果放入缓存。

3. Hash索引和B+索引

4.事务

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值