Java基础、中级、高级、架构面试资料

BAT 必问的 MySQL 面试题你都会吗?

SQL herman 1870浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

小程序里的题库越来越丰富了,最近上新了不少 MySQL 面试题。其中有一些面试题不常见,但却是 BAT 必问的面试题。今天我抽一些面试题考考大家!

BAT MySQL 面试题合集

1、MySQL 中的 latin1 是什么字符集?

这个字符集相信大家都见过,一般在创建数据库的时候会进行设置。它在 Java 中代表的就是 ISO-8859-1。共收录256个字符,是在ASCII 字符集的基础上又扩充了 128 个西欧常用字符(包括德法两国的字母),也可以使用 1 个字节来进行编码。ISO-8859-1 这个字符集在 MySQL 中的别名就是 latin1。

2、为什么我们通常推荐使用 utf8mb4 字符集?

这个很多文章都写过,说使用 utf8 会出问题,比如当我们存储 emoji 表情时,会出现无法存入的问题。但是没有人从原理上来说为什么会丢失。这个我们可以通过 SHOW CHARSET like ‘utf8%’; 命令查看一下 utf8 和 utf8mb4 的区别。

SHOW CHARSET like ‘utf8%’

之所以无法存储的原因就是,UTF-8 编码有可能是两个、三个、四个字节。Emoji 表情是 4 个字节,而 Mysql 的 utf8 编码最多 3 个字节,所以数据插不进去。

3、表 xttblog 存在且该表中不存在 name 字段,那么执行 select * from xttblog where name = ‘业余草’ 肯定会报错,请问是在连接器,分析器,优化器,执行器等哪个阶段报错?

这个题是我昨天发在微信群里的一个题,很多人答错。答案是分析器。因为,连接器是负责处理管理连接,权限验证的;分析器是进行词法分析,语法分析的;优化器是进行语句优化,生成执行计划,选择索引的;执行器是真正执行 SQL 语句的,并返回结果集的。所以,回答分析器才是对的。

4、MySQL 5.8 中为什么把查询缓存这一块移除了?

这个查询缓存,这一块估计很多人都没注意到。新版本的 5.8 版本的 MySQL 数据库已经移除了查询缓存这一块的设计。而且在 5.7 版本中也不推荐使用了。移除的原因是,虽然查询缓存有时候能比较快的返回数据,但是维护起来太麻烦了。而且缓存命中率太低了。如果对应的表有 insert、update、delete 等,那么缓存就得失效。如果查询语句中有函数,则放弃查询缓存。因为函数会设计的计算等有太多的不确定性。还有一些函数根本不能缓存,或没必要缓存。比如,select now() 就不能缓存,再比如,select version() 就没必要缓存。综合考虑,MySQL 把它给移除了。

更多关于 MySQL 的面试题,参考我的面试题小程序。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » BAT 必问的 MySQL 面试题你都会吗?