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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
6月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
323 5
|
4月前
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
6月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
5月前
|
缓存 NoSQL Java
校招 Java 面试常见知识点及实战案例全解析
本文全面解析了Java校招面试中的常见知识点,涵盖Java新特性(如Lambda表达式、、Optional类)、集合框架高级应用(线程安全集合、Map性能优化)、多线程与并发编程(线程池配置)、JVM性能调优(内存溢出排查、垃圾回收器选择)、Spring与微服务实战(Spring Boot自动配置)、数据库与ORM框架(MyBatis高级用法、索引优化)、分布式系统(分布式事务、缓存应用)、性能优化(接口优化、高并发限流)、单元测试与代码质量(JUnit 5、Mockito、JaCoCo)以及项目实战案例(电商秒杀系统、社交消息推送)。资源地址: [https://pan.quark.cn/s
192 4
|
6月前
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
5月前
|
存储 设计模式 算法
校招 Java 面试常见知识点汇总及备考指南
本文全面解析校招Java面试常见知识点,涵盖Java基础、集合框架、多线程并发、JVM等内容。从面向对象特性(封装、继承、多态)到数据类型与包装类,再到字符串处理和关键字用法,逐一剖析。集合框架部分深入讲解List、Set、Map接口及其常用实现类的特性和应用场景。多线程章节探讨线程创建、同步机制及线程池的使用。JVM部分聚焦内存区域、垃圾回收机制和类加载过程。结合实际案例,助你轻松应对校招面试!资源地址:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
136 0
|
8月前
|
消息中间件 NoSQL 关系型数据库
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
126 3

推荐镜像

更多