返回顶部
首页 > 资讯 > 数据库 >几个MySQL高频面试题的解答
  • 772
分享到

几个MySQL高频面试题的解答

MySQL面试题MySQL高频面试题解答 2022-05-27 20:05:09 772人浏览 薄情痞子
摘要

前言:  在各类技术岗位面试中,似乎 Mysql 相关问题经常被问到。无论你面试开发岗位或运维岗位,总会问几道数据库问题。经常有小伙伴私信我,询问如何应对 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高频面试题的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 几个MySQL高频面试题的解答

本文链接: https://lsjlt.com/news/10111.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 几个MySQL高频面试题的解答
    前言:  在各类技术岗位面试中,似乎 MySQL 相关问题经常被问到。无论你面试开发岗位或运维岗位,总会问几道数据库问题。经常有小伙伴私信我,询问如何应对 MySQL 面试题。其实很多面试题都是大同小异的,...
    99+
    2022-05-27
    MySQL 面试题 MySQL 高频面试题解答
  • uniapp高频面试题及答案合集
    目录谈谈你对uni-app的理解uni中如何为不同的平台设置不同的代码条件注释的作用和使用方法条件注释定义条件注释的语法uniapp中封装接口请求相较于微信小程序有什么要注意的uni...
    99+
    2023-02-18
    uniapp常见面试题 uni-app面试题 uniapp开发小程序面试题
  • Python、Laravel 和对象面试的高频问题及解答
    Python、Laravel 和对象是近年来非常热门的编程语言和框架。许多公司在招聘程序员时也会考察这些技术的相关知识。在面试时,掌握一些高频问题及其解答将大有裨益。本文将介绍一些常见的 Python、Laravel 和对象面试问题及其解...
    99+
    2023-09-22
    laravel 对象 面试
  • 【整理分享】48个前端高频面试题(附答案解析)
    48.vue中keep-alive 的作用< keep-alive >是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。< keep-alive > 包裹动态组件时,会缓存不活动的组件实例...
    99+
    2023-05-14
    javascript Vue 前端面试题
  • Mysql大厂高频面试题
    前言 前几天有读者找到我,说想要一套全面的Mysql面试题,今天陈某特地为她写了一篇。 文章的目录如下: Mysql面试题 什么是SQL? 结构化查询语言(Structured Query Language)简称SQL,是...
    99+
    2015-10-12
    Mysql大厂高频面试题
  • 高频率Vue面试题及答案有哪些
    这篇文章主要介绍“高频率Vue面试题及答案有哪些”,在日常操作中,相信很多人在高频率Vue面试题及答案有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高频率Vue面试题及答案有哪些”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • 高频率Vue面试题汇总以及答案
    目录什么是三次握手?什么是四次挥手?(close触发)什么是VUEX?什么是同源----跨域?什么是Promise?什么是fexl布局?数据类型什么是深浅拷贝?什么是懒加载?什么是守...
    99+
    2023-02-21
    常见vue面试题 vuejs面试题及答案 vue面试题及答案
  • MySQL的高频面试题有哪些
    本篇内容介绍了“MySQL的高频面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.什么是关系型...
    99+
    2024-04-02
  • 熟悉这几道 Redis 高频面试题,面试不用愁
    1、说说 Redis 都有哪些应用场景?缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。共享Session:对于一些依赖 session 功能...
    99+
    2023-06-02
  • 35个MySQL常见面试题+答案
    今天给大家总结了35 个 Mysql 常见的小问题 说一说三大范式 2.MyISAM 与 InnoDB 的区别是什么? 3.为什么推荐使用自增 id 作为主键? 4.一条查询语句是怎么执行的 5.使用 Innodb 的情况下,一条更新语句是...
    99+
    2023-09-11
    java 经验分享 数据库架构
  • web前端高频面试题及答案有哪些
    这篇文章主要介绍了web前端高频面试题及答案有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端高频面试题及答案有哪些文章都会有所收获,下面我们一起来看看吧。1.vue双向数据绑定的原理?mvvm场景...
    99+
    2023-07-04
  • MySQL高频面试题都是怎么样的
    本篇文章给大家分享的是有关MySQL高频面试题都是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。唯一索引比普通索引快吗, 为什么?唯一...
    99+
    2024-04-02
  • 硬核 Redis 高频面试题解析
    目录1、Redis 是单线程还是多线程?2、为什么 Redis 是单线程?3、Redis 为什么使用单进程、单线程也很快4、Redis 在项目中的使用场景5、Redis 常见的数据结...
    99+
    2024-04-02
  • 今天面试了几家高级测试工程师,面试题整理(含答案)
    面试问题列表 候选人总共有8年左右的工作经验,先后做过自动化、测试平台和性能测试,简历上写了熟悉java,偏测试开发方向,所以面试题偏java技术。 自我介绍 个人信息+学校专业(如果学校一般般就别说了)+技术栈+工作擅长点(性能、自动化、...
    99+
    2023-10-12
    java 开发语言 软件测试 自动化测试 职场和发展
  • Python的16个高频面试问题是什么
    本篇内容介绍了“Python的16个高频面试问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(一)Python 是如何进行内存管理的...
    99+
    2023-06-29
  • Python面经之16个高频面试问题总结
    目录(一)Python 是如何进行内存管理的?(二)什么是 lambda 函数?它有什么好处(三)Python 里面如何实现 tuple 和 list 的转换?(四)请写出一段 Py...
    99+
    2024-04-02
  • 《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
    大家好,我是码农阿豪,一位热爱 Java 编程的程序员。今天我想和大家分享一些常见的 Java 面试题,通过收集解析这些问题,希望能够帮助大家更好地准备面试,突破技术瓶颈,把面试官按在地上摩擦 。 ...
    99+
    2024-01-21
    面试 java
  • Java后端真实面试题大全(有详细答案)--高频/真题
    原文网址:Java后端真实面试题大全(有详细答案)--高频/真题_IT利刃出鞘的博客-CSDN博客 简介 说明 本文分享Java后端面试题,这套题真实、高频、全面、有详细答案、保你稳过面试,让你成为offer收割机。 本套题是我原创,历时两...
    99+
    2023-09-01
    java 后端 真实 面试题
  • 【面试】Java面试频繁问到的题最新整理(附答案)
    文章目录 一、Java基础部分面试题1.1. Java面向对象的三个特征1.2. Java中基本的数据类型有哪些 以及他们的占用字节1.3. int和Integer的区别1.4. String、StringBuilder、Strin...
    99+
    2023-08-30
    java 面试
  • Java中高级面试题(附答案)
    1、redis如何跟本地数据同步?程序实现mysql更新、添加、删除就会同步操作redis程序查询redis,不存在就查询mysql,自动保存redis2、redis几种数据结构?set、list、hash、string、zset3、jav...
    99+
    2018-05-12
    java面试题 java 高级面试题 中级
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作