1 Star 0 Fork 31

阿明 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2021年MySQL面试题大汇总附答案.md 10.11 KB
一键复制 编辑 原始数据 按行查看 历史

2021年MySQL面试题大汇总附答案

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

MySQL

题1:MySQL 中事务回滚机制原理?

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。

题2:非聚簇索引一定会回表查询吗?

不一定,如果查询语句的字段全部命中了索引,那么就不必再进行回表查询。

举个简单例子,假设在用户表上建立索引,那么当进行

select age from user where age < 20;

查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询。

题3:MySQL 中什么是联合索引?

1、联合索引是两个或更多个列上的索引。

对于联合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。

例如索引是key index(a,b,c),可以支持a 、a,b 、a,b,c 3种组合进行查找,但不支持b,c进行查找,当最左侧字段是常量引用时,索引就十分有效。

2、利用索引中的附加列,可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。

复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。

如果知道姓,电话簿将非常有用;如果知道姓和名,电话簿则更为有用,但如果只知道名不知道姓,电话簿将没有用处。

题4:MySQL 中 InnoDB 引擎的行锁是怎么实现的?

基于索引来完成行锁的。

select * from user where id = 766 for update;

for update可以根据条件来完成行锁锁定,并且id是有索引键的列,如果id不是索引键那么InnoDB将实行表锁。

题5:MySQL 中都有哪些锁?

一、按照对数据操作的锁粒度来分:行级锁、表级锁、页级锁、间隙锁

1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

二、按照锁的共享策略来分:共享锁、排他锁、意向共享锁、意向排他锁

三、从加锁策略上分:乐观锁和悲观锁

四、其他:自增锁

自增锁(AUTO-INC锁)、外键检测的加锁策略

题6:分区表都有哪些限制因素?

1、一个表最多只能有1024个分区。

2、MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。

3、如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列。

4、分区表中无法使用外键约束。

5、MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。

题7:什么是数据库三范式?

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在”A → B → C”的决定关系,则C传递函数依赖于A。

题8:表分区与分表有什么区别?

分表: 指的是通过一定规则,将一张表分解成多张不同的表。比如将用户订单记录根据时间成多个表。

分表与分区的区别在于:分区从逻辑上来讲只有一张表,而分表则是将一张表分解成多张表。

题9:MySQL 有哪几种索引类型,各自特点?

常见的MySQL索引结构有B-树索引,B+树索引,Hash索引和全文索引。

B-Tree索引

1)因为存储引擎不用进行全表扫描来获取数据,直接从索引的根节点开始搜索,从而能加快访问数据的速度。

2)B-Tree对索引是顺序组织存储的,很适合查找范围数据。

3)适用于全键值、键值范围或者键前缀查找(根据最左前缀查找)。

4)限制:对于联合索引来说,如果不是从最左列开始查找,则无法使用索引;不能跳过索引中的列。

B+Tree索引

1)是B-Tree索引的变种,现在主流的存储引擎都不用单纯的B-Tree,而是其变种B+Tree或者T-Tree等等。

2)和B-Tree最主要的区别就是B+Tree的内节点不存储data,只存储key,叶子节点不存储指针。

Hash索引

1)基于Hash表实现,只有Memory存储引擎显式支持哈希索引。

2)适合等值查询,如=、in)、<=>,不支持范围查询。

3)因为不是按照索引值顺序存储的,就不能像B+Tree索引一样利用索引完成排序。

4)Hash索引在查询等值时非常快。

5)因为Hash索引始终索引的所有列的全部内容,所以不支持部分索引列的匹配查找。

6)如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。

7)程序员可以在B+Tree索引的基础上创建自适应Hash索引。

全文索引

1)MyISAM和InnoDB都支持全文索引。

2)有三种模式:自然语言模式,布尔模式和查询扩展模式。

R-Tree索引

MyISAM支持R-Tree索引,这个和全文索引基本不问。

题10:数据库引擎都有哪些?

InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。 但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。

MyISAM不支持事务、也不支持外键,其优势是访问的速度快,对事务的完整性没有要求或者以SELECT、INSERT 为主的应用基本上都可以使用这个引擎来创建表。

Memory存储引擎将表的数据存放在内存中。每个MEMORY表实际对应一个磁盘文件,格式是.frm ,该文件中只 存储表的结构,而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。MEMORY 类型的表访问非常地快,因为他的数据是存放在内存中的,并且默认使用HASH索引 ,但是服务一旦关闭,表中的 数据就会丢失。

MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身并没有存储数据,对 MERGE类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行的。

题11:mysql-中记录货币用什么字段类型比较好

题12:组合索引是什么为什么需要注意组合索引中的顺序

题13:为什么说-b-比-b-树更适合实际应用中文件数据库索引

题14:mysql-中如何找出最后一次插入时分配的自动增量

题15:什么是游标

题16:mysql-中存储日期格式时如何考虑时区转换问题

题17:mysql-中什么情况下设索引失效

题18:存储过程有哪些优缺点

题19:什么是聚簇索引

题20:-mysql-中-binlog-有几种录入格式分别有什么区别

题21:视图常见使用场景有哪些

题22:mvcc-并发控制中读操作分成哪两类

题23:什么是覆盖索引回表等了解过吗

题24:mysql-中有哪些非标准字符串类型

题25:超键候选键主键外键分别是什么

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/AminDev/ebooks.git
git@gitee.com:AminDev/ebooks.git
AminDev
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891