面试必问的 MySQL 知识点,你还有哪些没准备好,赶紧收藏脑图!(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Hello,大家好,我是鸭血粉丝,虽说今年的大环境不是很好,但是现在毕竟是金三银四,有些公司还是在招聘的。MySQL 作为我们 Java 工程师最常用的数据库,不管是在日常的工作中还是面试中,我们都必须要对 MySQL 常见的一些知识有很好的储备,这样在面试的过程中才可以做到得心应手。下面阿粉从 MySQL 最高频的几个知识点给大家介绍一下。

Hello,大家好,我是鸭血粉丝,虽说今年的大环境不是很好,但是现在毕竟是金三银四,有些公司还是在招聘的。MySQL 作为我们 Java 工程师最常用的数据库,不管是在日常的工作中还是面试中,我们都必须要对 MySQL 常见的一些知识有很好的储备,这样在面试的过程中才可以做到得心应手。下面阿粉从 MySQL 最高频的几个知识点给大家介绍一下。

更详细的脑图大家可以关注公众号,在后台回复【MySQL脑图】获得。

InnoDB 与 MyISAM 引擎的区别

InnoDB 与 MyISAM 的区别阿粉在日常学习和面试中经常被问到,我们先来看看这个吧。67.jpg

锁相关

  1. InnoDB 支持表级锁和行级锁,MyISAM 只支持表级锁。事务的并发在如今的互联网海量数据的场景下基本上是无法摆脱的,这种情况下对数据库的锁的要求就要更细粒度。新版本的 MySQL 默认的数据库引擎是 InnoDB 很大的原因就是 InnoDB 支持行级锁,在日常的业务场景下,我们是不能允许使用表级锁的,对业务的影响是很大的。
  2. InnoDB 的锁分为共享锁 S 和独占锁 X,意向共享锁 IS,意向独占锁 IX,记录锁,间隙锁以及 next-key 锁。关于锁的详细信息可以回顾公号之前发过的文章 面试你应该知道的 MySQL 锁

底层的文件结构

InnoDB 和 MyISAM 引擎底层存储数据的文件结构也不一样。InnoDB 引擎的数据表底层只有.frm 和 .ibd 两种格式的文件。MyISAM 引擎的表底层有 .MYD,.MYI 和 .frm 三种格式的文件。

68.jpg

上图中表 other_table 的引擎采用的是 MyISAM,底层会出现三种格式的文件,分别是 .frm 用于存储表结构的文件;.MYD 全称为 .mydata 用于存放数据的文件;.MYI 全称为 .myIndex 用于存放索引的文件。而表 sys_log_op 表的引擎采用的是 InnoDB,底层只有两个文件,分别为 .frm 同样用于存放表的数据结构;.ibd 文件用于存储数据和索引的文件。

从上面我们可以看到,InnoDB 的数据和索引是存放在同一个文件中的而 MyISAM 的数据和索引是分开存储的,这也导致两者的索引的实现方式的不同

索引的实现方式

InnoDB 的索引采用 B+ 树实现,主键索引的叶子节点存储的是完整的数据,辅助索引的叶子节点存储的是主键的值。所以如果在使用辅助索引进行查询数据的时候是会有回表的操作,所以我们尽量用主键进行查询。另外如果建表的时候没有设置主键的话,InnoDB 引擎会自动生成一个 rowid 作为表的主键。

MyISAM 的索引也是采用 B+ 树实现的,与 InnoDB 不同的是,MyISAM 主键索引的叶子节点和辅助索引保存的都是数据的地址,主键索引并没有保存完整的数据,所以都需要根据数据地址再次查询数据。

事务的支持

InnoDB 与 MyISAM 另一个最大的区别就是 InnoDB 支持事务,而 MyISAM 不支持事务。事务也是 MySQL 另外一个常规问题,我们下面看下事务的相关知识。

事务

0.jpg

事务也是一个必问的知识点哦!

1.jpg

事务的四大特性 ACID

  1. A: 原子性。原子性表示事务的操作是不可分割的,事务内的一系列操作全部成功事务才成功,任何一个操作失败事务都是失败,必须回滚。
  2. C: 一致性。一致性表示事务在操作前和操作后数据都是处于一致的状态。只表示在事务的操作前后的数据一致,但是并不是代表是正确。
  3. I:隔离性。事务的并发操作是完全隔离的,不同的事务之间不会相互有影响。事务的隔离级别有四种
  1. 读未提交:表示一个事务内可以读取到另一个事务未提交的数据内容,会出现脏读,不可重复度,幻读。
  2. 读已提交:表示一个事务内可以读取另一个事务已经提交的内容,会出现不可重复读和幻读。
  3. 可重复读:表示一个事务内两次相同条件读的内容一致,但是会出现幻读。
  4. 串行化:没有问题,但是效率低下。
  1. D:持久性。事务操作结束过后,对数据的更改是可以持久化的,不管事务的操作是成功还是失败,事务日志都能保证事务的持久性。

脏读:指一个事务 A 读取到另一个事务 B 未提交的数据,也就是脏数据。

不可重复读:指一个事务 A 第一次根据条件查询某条数据,事务 B 修改了该数据并提交了,事务 A 第二次查询与第一次查询的不一致。

幻读:指事务 A 根据条件查询一批数据,事务 B 插入了新的满足条件的数据,事务 A 再次查询数据量变化了,两次查询的结果集不一致,出现了幻读。

2.jpg


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
150
分享
相关文章
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
1.请解释什么是MVCC,它在数据库中的作用是什么? 2.在MySQL中,MVCC是如何实现的?请简述其工作原理。 3.MVCC是如何解决读-写和写-写冲突的? 4.在并发环境中,当多个事务同时读取同一行数据时,MVCC是如何保证每个事务看到的数据版本是一致的? 5.MVCC如何帮助提高数据库的并发性能?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
MySQL 面试题
MySQL 的一些基础面试题
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
[MySQL]知识点
本文详细介绍了MySQL中int族和char族数据类型的特点、存储范围及使用建议,以及text、blob类型和内置字符处理函数。文章强调了数据类型选择的重要性,并提供了多个实例帮助理解。
54 0
[MySQL]知识点
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等