mysql面试题及答案100题(几个MySQL高频面试题的解答)
mysql面试题及答案100题
几个MySQL高频面试题的解答前言:
在各类技术岗位面试中,似乎 MySQL 相关问题经常被问到。无论你面试开发岗位或运维岗位,总会问几道数据库问题。经常有小伙伴私信我,询问如何应对 MySQL 面试题。其实很多面试题都是大同小异的,提前做准备还是很有必要的。本篇文章简单说下几个常见的面试题,一起来学习下吧。
1.什么是关系型数据库?谈谈你对 MySQL 的认识。
这是一道基础题,考察面试者对数据库的了解程度,一般可以简单讲下自己的认知,有条理即可。比如:
关系型数据库是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据。关系型数据库最大的特点是支持事务。常见的关系型数据库有 MySQL、Oracle、SQLServer 等。MySQL 是当下最流行的开源数据库。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多公司都采用 MySQL 数据库以降低成本,目前被广泛地应用在 Internet 上的中小型网站中,尤其适用于 OLTP 领域。
2.MySQL 常见的存储引擎有哪些,有什么区别?
这个问题也经常被问到,和『InnoDB 与 MyISAM 引擎的区别』问题相似。
常见的几种存储引擎:
- InnoDB: MySQL 默认的存储引擎,支持事务、MVCC、外键、行级锁和自增列。
- MyISAM: 支持全文索引、压缩、空间函数、表级锁,不支持事务,插入速度快。
- Memory: 数据都在内存中,数据的处理速度快,但是安全性不高。
- ARCHIVE: 常用于历史归档表,占用空间小,数据不能更新删除。
InnoDB 与 MyISAM 引擎的几点区别:
- InnoDB 支持事务,MyISAM 不支持事务。
- InnoDB 支持外键,而 MyISAM 不支持。
- InnoDB 不支持全文索引,而 MyISAM 支持。
- InnoDB 是聚簇索引,MyISAM 是非聚簇索引。
- InnoDB 不保存表的具体行数,而 MyISAM 用一个变量保存了整个表的行数。
- InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。
- 存储结构不同,MyISAM 表分为 frm MYD MYI 三个,InnoDB 一般分为 frm ibd 两个。
3.描述下 MySQL 基础架构。
这个问题考察面试者对 MySQL 架构的了解,和『一条 select 语句执行流程』问题相似。
MySQL的逻辑架构主要分为3层:
- 第一层:对客户端的连接处理、安全认证、授权等,每个客户端连接都会在服务端拥有一个线程,每个连接发起的查询都会在对应的单独线程中执行。
- 第二层:MySQL的核心服务功能层,包括查询解析、分析、查询缓存、内置函数、存储过程、触发器、视图等,select操作会先检查是否命中查询缓存,命中则直接返回缓存数据,否则解析查询并创建对应的解析树。
- 第三层:存储引擎,负责数据的存储和提取,MySQL服务器通过API与存储引擎通信,屏蔽了各种引擎之间的差异,常见的存储引擎有:InnoDB、MyISAM。
一条 select 语句执行流程:
- 客户端通过连接器与 MySQL 服务器建立连接,并获取了用户的读写权限,然后提交查询语句。
- 首先 MySQL 会在查询缓存中对提交的语句进行查询,如果命中且用户对表有操作权限,会直接返回查询缓存中查询结果作为本次查询的结果,查询到此结束。
- 如果查询缓存未命中,会来到分析器,分析器会解析语句并检查其合法性。如果语句不符合 MySQL 的语法规范,执行器会报错,查询到此结束。
- 若语句合法,会来到优化器,优化器会为 SQL 语句选择最优的执行计划。
- 最后来到执行器,如果用户对表有操作权限,执行器会调用存储引擎提供的接口来执行 SQL 语句,然后将查询结果返回给客户端,查询到此结束。
4.说说常用的几种字段类型。
这个问题考察面试者对 MySQL 字段类型的了解程度,可以延伸出很多小问题,例如 char 与 varchar 的区别。
常用的字段类型分类:
数值型:
字符串类型:
日期和时间类型:
int(M)中的 M 代表最大显示宽度,"最大显示宽度"我们第一反应是该字段的值最大能允许存放的值的宽度,以为我们建了int(1),就不能存放数据10了, 其实不是这个意思,int(5)和int(10)可存储的范围一样。
CHAR类型是定长的,MySQL总是根据定义的字符串长度分配足够的空间。当保存CHAR值时,在它们的右边填充空格以达到指定的长度,当检索到CHAR值时,尾部的空格被删除掉。VARCHAR类型用于存储可变长字符串,存储时,如果字符没有达到定义的位数,也不会在后面补空格。char(M) 与 varchar(M)中的的 M 都表示保存的最大字符数,单个字母、数字、中文等都是占用一个字符。
5.讲讲索引的作用及结构及使用规范。
关于索引,能有好多好多问题,可能几篇文章也写不明白。简单分享下这类问题的回答:
索引的目的在于提高查询效率。可以类比字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。
InnoDB 引擎下,主要使用的是 B+Tree 索引,每个索引其实都是一颗B+树,B+树是为了磁盘及其他存储辅助设备而设计的一种平衡查找树(不是二叉树),在B+树中,所有的数据都在叶子节点,且每一个叶子节点都带有指向下一个节点的指针,形成了一个有序的链表。
从物理存储角度来看,InnoDB 索引可分为聚簇索引(clustered index)和二级索引(secondary index)或辅助索引。聚簇索引的叶子节点存的是整行数据,当某条查询使用的是聚簇索引时,只需要扫描聚簇索引一颗B+树即可得到所需记录,如果想通过二级索引来查找完整的记录的话,需要通过回表操作,也就是在通过二级索引找到主键值之后再到聚簇索引中查找完整的记录。
索引的优点显而易见是可以加速查询,但创建索引也是有代价的。首先每建立一个索引都要为它建立一棵B+树,会占用额外的存储空间;其次当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。所以,索引的创建及使用时有原则的,一般只为用于搜索、排序、分组、连接的列创建索引,选择性差的列尽量不创建索引。
6.讲下 MySQL 事务的特性及隔离级别。
MySQL 事务相关问题也经常被问到,一些原理性的东西还是需要深入去学习的。
ACID 四个特性:
- A(Atomicity,原子性):一个事务中的操作要么都成功,要么都失败。
- C(Consistency,一致性):数据库总是从一个一致性状态转换到另一个一致性状态,若破坏约束,则不满足一致性条件。
- I(Isolation,隔离性):一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
- D(Durability,持久性):事务在提交以后,它所做的修改就会被永久保存到数据库。
事务隔离级别:
- 读未提交(Read Uncommitted):事务中的修改,即便没有提交,对其他事务也都是可见的。
- 读已提交(Read Committed):事务中的修改只有在提交之后,才会对其他事务可见。
- 可重复读(Repeatable Read):一个事务中多次查询相同的记录,结果总是一致的(默认的隔离级别)。
- 可串行化(Serializable):事务都是串行执行的,读会加读锁,写会加写锁。
并发事务带来的问题:
- 脏读(Dirty Reads):事务A读取了事务B未提交的数据,然后B回滚操作,那么A读取到的数据是脏数据。
- 不可重复读(Non-Repeatable Reads):事务 A 多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
- 幻读(Phantom Reads):幻读与不可重复读类似。它发生在一个事务A读取了几行数据,接着另一个并发事务B插入了一些数据时。在随后的查询中,事务A就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。
以上就是几个MySQL高频面试题的解答的详细内容,更多关于MySQL高频面试题的资料请关注开心学习网其它相关文章!
原文链接:https://mp.weixin.qq.com/s/J0p_64BKUwFcp1mERageew
- mysql数据字段默认值怎么设置(MySQL 字段默认值该如何设置)
- mysql安装失败原因和解决方法(MySQL MGR搭建过程中常遇见的问题及解决办法)
- mysql模糊匹配语句(MySQL 数据库 like 语句通配符模糊查询小结)
- python和mysql实战(由Python编写的MySQL管理工具代码实例)
- MySQL中使用mysqldump命令备份
- cent os7.0 安装mysql(mysql8.0.23 linuxcentos7安装完整超详细教程)
- mysql时间存储如何选择(MySQL如何使用时间作为判断条件)
- mysql优化方案最新(记一次MySQL的优化案例)
- mysql密码过期怎么改(年底了,你的mysql密码安全吗)
- mysql 时间戳获取(MySQL时间盲注的五种延时方法实现)
- mysql查询逗号分割字符串(MySQL 字符串拆分实例无分隔符的字符串截取)
- 如何在mysql中批量插入数据(MySQL如何快速批量插入1000w条数据)
- mysql用什么类型数据(MySQL 数据类型选择原则)
- mysql查看执行计划
- mysqlupdate语句(MySQL将select结果执行update的实例教程)
- mysql 加锁处理分析(mysql死锁和分库分表问题详解)
- 寒假余额不满24小时,不如来一场说走就走的亲子阅读之旅(寒假余额不满24小时)
- 省委书记出席的交流会,十位县委书记同场发言,代表公文材料的高水平(省委书记出席的交流会)
- 《刘老根3》热播,去世15年的她却再次被 伤害(去世15年的她却再次被)
- 十二星座爱情支配欲指数(十二星座爱情支配欲指数)
- 虐待儿童是发泄支配欲的愚蠢行为(虐待儿童是发泄支配欲的愚蠢行为)
- 你或许不知道你隐藏的支配欲望(你或许不知道你隐藏的支配欲望)
热门推荐
- 用php调用函数的换行(php中关于换行的实例写法)
- python 验证码识别模块([机器视觉]使用python自动识别验证码详解)
- vuejs指令解析(Vue.js中的计算属性、监视属性与生命周期详解)
- ubuntu如何卸载clion(Ubuntu16.04安装clion全过程及步骤详解)
- WCF与WebService的区别
- python循环语句嵌套使用(Python分支语句与循环语句应用实例分析)
- 西部数码服务器月目录是什么(西部数码云服务器如何续费)
- 微信小程序ui聊天窗口(微信小程序实现简单聊天室)
- 别让用户发呆,提升网站用户体验
- rabbitmq延迟队列原理(Rabbitmq heartbea心跳检测机制原理解析)