大厂面试常问的MySQL 68题及答案

今天给大家分享MySQL常考的面试题,让你跟面试官 So easy,看看你们能答对多少。


目录:

1、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?

2、Mysql的技术特点是什么?
3、Heap表是什么?

4、Mysql服务器默认端口是什么?
5、与Oracle相比,Mysql有什么优势?

6、如何区分FLOAT和DOUBLE?

7、区分CHAR_LENGTH和LENGTH?

8、非聚簇索引一定会回表查询吗?

9、数据库三大范式是什么

10、数据库为什么使用B+树而不是B树

11、SQL的生命周期?

12主键索引与唯一索引的区别

13、MySQL数据库cpu飙升的话,要怎么处理呢?

14. 日常工作中你是怎么优化SQL的?

15.数据库索引的原理,为什么要用 B+树,为什么不用二叉树?

16. 事务的隔离级别有哪些?MySQL的默认隔离级别是什么?

17. 如果某个表有近千万数据,CRUD比较慢,如何优化。

18、请简洁描述Mysql中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?

19、在Mysql中ENUM的用法是什么?

20、如何定义REGEXP?

21、CHAR和VARCHAR的区别?

22、列的字符串类型可以是什么?

23、如何获取当前的Mysql版本?

24、Mysql中使用什么存储引擎?

25、Mysql驱动程序是什么?

26、TIMESTAMP在UPDATECURRENT_TIMESTAMP数据类型上做什么?

27、主键和候选键有什么区别?


28、如何使用Unixshell登录Mysql?

29、myisamchk是用来做什么的?

30、MYSQL数据库服务器性能分析的方法命令有哪些?

31、如何控制HEAP表的最大尺寸?

32、MyISAMStatic和MyISAMDynamic有什么区别?

33、federated表是什么?

34、如果一个表有一列定义为TIMESTAMP,将发生什么?

35、列设置为AUTOINCREMENT时,如果在表中达到最大值,会发生什么情况?

36、怎样才能找出最后一次插入时分配了哪个自动增量?

37、你怎么看到为表格定义的所有索引?

38、LIKE声明中的%和_是什么意思?

39、如何在Unix和Mysql时间戳之间进行转换?


40、列对比运算符是什么?

41、我们如何得到受查询影响的行数?

42、Mysql查询是否区分大小写?


43.、LIKE和REGEXP操作有什么区别?

44.、BLOB和TEXT有什么区别?


45、mysql_fetch_array和mysql_fetch_object的区别是什么?

46、我们如何在mysql中运行批处理模式?

47、MyISAM表格将在哪里存储,并且还提供其存储格式?


48.、Mysql中有哪些不同的表格?

49、ISAM是什么?

50、InnoDB是什么?

51、Mysql如何优化DISTINCT?

52、如何输入字符为十六进制数字?

53、如何显示前50行?

54、可以使用多少列创建索引?

55、NOW()和CURRENT_DATE()有什么区别?

56、什么样的对象可以使用CREATE语句创建?

57、Mysql表中允许有多少个TRIGGERS?

58、什么是非标准字符串类型?

59、什么是通用SQL函数?

60、解释访问控制列表

61、MYSQL支持事务吗?

62、mysql里记录货币用什么字段类型好

63、MYSQL数据表在什么情况下容易损坏?

64、mysql有关权限的表都有哪几个?

65、Mysql中有哪几种锁?

66、select for update有什么含义,会锁表还是锁行还是其他。

67、索引的数据结构(b树,hash)

68. mysql中in 和exists的区别。


具体内容:

1、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?

(1)如果表的类型是MyISAM,那么是18因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失(2)如果表的类型是InnoDB,那么是15InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失

2、Mysql的技术特点是什么?

Mysql数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程SQL服务器、不同的后端、广泛的应用程序编程接口和管理工具。

3、Heap表是什么?

HEAP表存在于内存中,用于临时高速存储。BLOB或TEXT字段是不允许的只能使用比较运算符=,<,>,=>,=<HEAP表不支持AUTO_INCREMENT索引不可为NULL

4、Mysql服务器默认端口是什么?

Mysql服务器的默认端口是3306。

5、与Oracle相比,Mysql有什么优势?

Mysql是开源软件,随时可用,无需付费。Mysql是便携式的带有命令提示符的GUI。使用Mysql查询浏览器支持管理

6、如何区分FLOAT和DOUBLE?

以下是FLOAT和DOUBLE的区别:浮点数以8位精度存储在FLOAT中,并且有四个字节。浮点数存储在DOUBLE中,精度为18位,有八个字节。

7、区分CHAR_LENGTH和LENGTH?

CHAR_LENGTH是字符数,而LENGTH是字节数。Latin字符的这两个数据是相同的,但是对于Unicode和其他编码,它们是不同的。

8非聚簇索引一定会回表查询吗?

不一定,如果查询语句的字段全部命中了索引,那么就不必再进行回表查询(哈哈,覆盖索引就是这么回事)。

举个简单的例子,假设我们在学生表的上建立了索引,那么当进行select age from student where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询。

9、数据库三大范式是什么?

第一范式:每个列都不可以再拆分。

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。

10、数据库为什么使用B+树而不是B树

1 B树只适合随机检索,而B+树同时支持随机检索和顺序检索;

2 B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。B+树的内部结点并没有指向关键字具体信息的指针,只是作为索引使用,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了。而IO读写次数是影响索引检索效率的最大因素;

3 B+树的查询效率更加稳定。B树搜索有可能会在非叶子结点结束,越靠近根节点的记录查找时间越短,只要找到关键字即可确定记录的存在,其性能等价于在关键字全集内做一次二分查找。而在B+树中,顺序检索比较明显,随机检索时,任何关键字的查找都必须走一条从根节点到叶节点的路,所有关键字的查找路径长度相同,导致每一个关键字的查询效率相当。

4 B-树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作。

5 增删文件(节点)时,效率更高。因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率。

11、SQL的生命周期?

1 应用服务器与数据库服务器建立一个连接

2 数据库进程拿到请求sql

3 解析并生成执行计划,执行

4 读取数据到内存并进行逻辑处理

5 通过步骤一的连接,发送结果到客户端

6 关掉连接,释放资源

12主键索引与唯一索引的区别

1 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。

2 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。

3 唯一性索引列允许空值,而主键列不允许为空值。

4 主键列在创建时,已经默认为空值 ++ 唯一索引了。

5 一个表最多只能创建一个主键,但可以创建多个唯一索引。

6 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。

7 主键可以被其他表引用为外键,而唯一索引不能?

13、MySQL数据库cpu飙升的话,要怎么处理呢?

排查过程:

1 使用top 命令观察,确定是MySQLd导致还是其他原因。

2 如果是MySQLd导致的,show processlist,查看session情况,确定是不是有消耗资源的sql在运行。

3 找出消耗高的 sql,看看执行计划是否准确, 索引是否缺失,数据量是否太大。

处理:

1 kill 掉这些线程(同时观察 cpu 使用率是否下降),

2 进行相应的调整(比如说加索引、改 sql、改内存参数)

3 重新跑这些 SQL。

其他情况

也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等

14. 日常工作中你是怎么优化SQL的?

可以从这几个维度回答这个问题:

  • 加索引
  • 避免返回不必要的数据
  • 适当分批量进行
  • 优化sql结构
  • 分库分表
  • 读写分离

15.数据库索引的原理,为什么要用 B+树,为什么不用二叉树?

可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不是二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?

「为什么不是一般二叉树?

如果二叉树特殊化为一个链表,相当于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。

「为什么不是平衡二叉树呢?」

我们知道,在内存比在磁盘的数据,查询效率快得多。如果树这种数据结构作为索引,那我们每查找一次数据就需要从磁盘中读取一个节点,也就是我们说的一个磁盘块,但是平衡二叉树可是每个节点只存储一个键值和数据的,如果是B树,可以存储更多的节点数据,树的高度也会降低,因此读取磁盘的次数就降下来啦,查询效率就快啦。

「那为什么不是B树而是B+树呢?」

1)B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。innodb中页的默认大小是16KB,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数有会再次减少,数据查询的效率也会更快。

2)B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,链表连着的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。

16. 事务的隔离级别有哪些?MySQL的默认隔离级别是什么?

  • 读未提交(Read Uncommitted)
  • 读已提交(Read Committed)
  • 可重复读(Repeatable Read)
  • 串行化(Serializable)

Mysql默认的事务隔离级别是可重复读(Repeatable Read)

17. 如果某个表有近千万数据,CRUD比较慢,如何优化。

分库分表

某个表有近千万数据,可以考虑优化表结构,分表(水平分表,垂直分表),当然,你这样回答,需要准备好面试官问你的分库分表相关问题呀,如

  • 分表方案(水平分表,垂直分表,切分规则hash等)
  • 分库分表中间件(Mycat,sharding-jdbc等)
  • 分库分表一些问题(事务问题?跨节点Join的问题)
  • 解决方案(分布式事务等)

索引优化

除了分库分表,优化表结构,当然还有所以索引优化等方案~

完整答案已整理好


最后别忘了点赞三连,祝各位看官老爷面试一招击敌,旗开得胜



#笔试题目##面经##Java##MySQL##学习路径#
全部评论
已关注求资料
点赞 回复 分享
发布于 2022-04-21 10:46
感觉我现在不敢投大厂了,不过很有用,关注领取?
点赞 回复 分享
发布于 2022-03-28 15:28

相关推荐

点赞 评论 收藏
分享
评论
2
21
分享

创作者周榜

更多
牛客网
牛客企业服务