MySQL面试题大全及答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

MySQL面试题大全及答案

一、基础概念类

问:MySQL的架构分为哪几层?各层主要作用是什么?

答:主要分3层,咱们平时用的时候能直观感受到每层的作用:

面试小贴士:面试官可能会追问“为什么8.0删了查询缓存”,记得结合“频繁更新的表缓存命中率低,还会有缓存失效开销”来答。

连接层:负责和客户端建立连接,比如连接器(验证账号密码、管理连接)、认证插件这些,还会处理SSL加密这类安全相关的;

服务层:核心功能都在这,像SQL接口(接收SQL语句)、解析器(把SQL转成执行计划,比如判断语法对错)、优化器(选最优执行方式,比如选哪个索引),还有查询缓存(不过MySQL8.0已经删掉了,因为命中率低还占资源);

存储引擎层:负责数据的存储和读取,比如InnoDB、MyISAM这些,不同引擎支持的功能不一样,比如事务、锁机制都靠这层实现。

问:MySQL常见的存储引擎有哪些?InnoDB和MyISAM的核心区别是什么?

答:常用的有InnoDB(默认)、MyISAM、Memory,核心区别看这几点:

对比项

InnoDB

MyISAM

事务支持

支持ACID

不支持

锁粒度

行锁(基于索引)

表锁

外键

支持

不支持

数据缓存

缓存数据+索引

只缓存索引

适用场景

写多、需事务(如订单表)

读多、无事务(如日志表)

实际例子:做电商订单系统肯定用InnoDB,因为下单要保证事务;做日志收集表用MyISAM,因为只查不怎么改,表锁影响小。

二、索引类

问:MySQL索引有哪些类型?按存储结构分呢?

答:按功能分容易记:

按存储结构分就两种:

面试小贴士:问联合索引一定要提“最左前缀原则”,比如联合索引(a,b,c),能用到索引的是wherea=?、wherea=?andb=?,但whereb=?就用不到。

主键索引:唯一且非空,一张表只能有一个,比如user表的id;

唯一索引:值唯一但可以为null,比如user表的phone(不能重复,但可以没有);

普通索引:没约束,就是加速查询,比如给user表的name加索引;

联合索引:多个字段一起建的索引,比如给order表的user_id+create_time建联合索引。

B+树索引:InnoDB和MyISAM都用这个,适合范围查询(比如查id100的记录);

哈希索引:只适合等值查询(比如查name=张三),InnoDB里是自适应的,不会手动建。

问:为什么InnoDB用B+树而不用B树或红黑树?

答:核心是减少磁盘IO,咱们得结合数据存在磁盘里的特点:

B树的叶子节点和非叶子节点都存数据,树的高度会比B+树高,查一次要读更多磁盘块(IO开销大);

B+树只有叶子节点存数据,非叶子节点只存索引,树更矮,而且叶子节点是有序链表,范围查询不用回溯,效率高;

红黑树是二叉树,数据量大的时候树的高度会非常高(比如百万数据要20层),IO次数直接爆炸,根本不适合数据库。

三、事务类

问:事务的ACID特性是什么?能举例子说明吗?

答:ACID就是四个保证,用转账例子最直观:

原子性(Atomicity):要么全成,要么全回滚。比如A转100给B,不能A扣了钱B没收到,要么都成功,要么都不扣;

一致性(Consistency):转账前后总金额不变。A有500,B有300,转完A400、B400,总金额还是800;

隔离性(Isolation):多个事务之间不干扰。比如A转钱的同时,B查余额,不会看到“A扣了钱但B没到账”的中间状态;

持久性(Durability):事务提交后数据永久保存。转完账就算数据库重启,A和B的余额也不会变回去。

问:MySQL的事务隔离级别有哪些?默认是哪个?各解决什么问题?

答:四个级别,从低到高依次是:

面试小贴士:要提InnoDB在可重复读级别下,用MVCC(多版本并发控制)解决了幻读,不用升到串行化。

读未提交(ReadUncommitted):能读到别人没提交的事务数据,会有“脏读”(比如A转钱没提交,B看到A余额变了,结果A回滚,B读的是脏数据);

读已提交(ReadCommitted):只能读到别人提交的事务数据,解决脏读,但有“不可重复读”(比如B查A余额是500,A转走100提交,B再查变成400,同一事务内读两次结果不一样);

可重复读(RepeatableRead):MySQL默认级别,同一事务内读多次结果一样,解决不可重复读,但有“幻读”(比如B查id10

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档