MySQL 数据库面试题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 数据库面试题

一、SQL 语句



SQL 语句的使用需要慢慢积累,遇到不同的场景使用不同的 SQL,积累的多,慢慢就不难了。


1. 查询一个班级里,分数排名的前三位同学的名字和分数。


排序 order by + 分页查询 limit.


5a8b16a7db334d3bba8307b1ed13a926.png


二、MySQL 索引



1. 索引是用来干什么的?


① 索引是对数据库表中一列或多列的值进行排序的一种结构。

② 索引可以大大提高的检索速度,也就是增删改查中的 " 查 " 。

③ 如果我们将数据库表比作成字典,将数据比作成字典中的内容,那么 " 索引 " 就是这些内容的 " 目录 "。


2. 索引的优缺点


(1) 索引的优点


① 索引大大减小了服务器需要扫描的数据量,从而加快了数据的查找速度,这也是创建索引的最主要的原因。

② 索引可以帮助服务器避免排序和创建临时表。


(2) 索引的缺点


① 索引需要占物理空间,创建出多个索引就占用了更多的空间。

② 由于索引本身需要维护,所以它拖慢了增、删、改的效率。


3. 索引的适用场合


索引适用于频繁查找数据的场合,不适用于频繁增、删、改的场合。


4. MySQL 背后的数据结构


(1) MySQL 索引的底层数据结构是 B+ 树。

(2) 阐明 B 树 和 B+ 树。


关键点: B+ 树的非叶子节点只存储索引,就像目录一样;其叶子节点只存储数据,就像字典中的内容一样。


0bb2b285792148d2badbd291e0fa2644.png92d65552363548fbaf986afdda736034.png


① 因为 B+ 树的所有数据均存储在叶子节点,而且数据是按照顺序排列的,所以 B+ 树使得范围查找、区间查找、分组查找变得异常简单。


② B 树由于所有的节点既存放索引,又存放数据,所以使用 B 树查找时,数据可能在树的不同高度被找到,这使得 B 树查找不稳定。然而,B+ 树 所有的查询最终都落在叶子节点中,每次的查询磁盘 IO 次数都是差不多的,查询速度非常稳定。


③ 由于 B+ 树 的非叶子节点只存储了索引 (键值对) 信息,而没有数据,这就使得 B+ 树非叶子节点占用的空间较小,所有它就能够加载更多的索引。这也反应了 B+ 树比 B 树更加的 " 矮胖 ",所以磁盘 I/O 次数更少,查找速度更快。


三、MySQL 事务



1. 事务的基本特性


(1) 原子性 (Atomicity)

原子性又被称为不可分割性。


原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。如果事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。在 MySQL 数据库的操作中表示:要么将这个操作所用到的 SQL 全部执行完,要么一个 SQL 都不执行。


(2) 一致性 (Consistency)

一致性:在事务执行前后,数据库的完整性没有被破坏。这表示事务增删改查的数据必须完全符合所有的预设规则,即数据库中的数据都是合理合法的。


比方说:还是上面的转账的例子,事务需要遵循程序的规则,在不出现意外的情况下,小明给小红转了 200 元,那么小明就只能剩下 300 元,而小红的存款就必须得是 700 元。即事务执行前后,遵循数据严格的传输规则。


(3) 持久性 (Isolation)

持久性:一旦事务执行结束后,那么它对数据的增删改查就是永久的,即便系统故障也不会丢失。


(4) 隔离性 (Durability)

隔离性:数据库允许多个并发事务同时对其数据进行增删改查,隔离性可以防止多个事务并发执行时,而由于交叉执行所导致数据的不一致的情况。事务隔离分为不同级别,包括读未提交、读提交、可重复读和串行化。


2. 并发事务所产生的问题


(1) 脏读

脏读:事务A 读取到了 事务B 未提交保存的数据,之后 事务B 进行了回滚操作,从而导致 事务A 读取了一个不存在的脏数据。


(2) 不可重复读

不可重复读:在同一个事务中,同一个查询操作在不同的时间得到了不同的结果。


举个例子:在同一个事务中,同一个查询操作在 t1时刻、t2 时刻,得到了不同的结果,这是因为在 t1 和 t2 时刻之间,有另一个事务对数据进行了修改。


(3) 幻读

幻读:一个事务执行的过程中进行了多次查询,多次查询的结果都不一样,可能多了一行记录或少了一条记录,这种操作是一种特殊的不可重读读。


虽然幻读和不可重复读很像,但不可重复读侧重于数据修改,两次读取到的同一行数据不一样;而幻读侧重于添加或删除,两次查询的 MySQL 记录行数不同。


3f0f43b689224a00b7d50e0ed514eeba.pngff1232fdb3ff4be6a0f775f7ba888020.png


3. MySQL中事务的隔离级别


(1) 读未提交 (read uncommitted)

读未提交 (也叫未提交读):在该隔离级别中,事务A 可以读取到事务B 中未提交的数据。鉴于此,若 事务B 未提交的数据发生了回滚操作,那么 事务A 就直接读到了错误的数据,由此产生的问题称之为脏读。


也就是说,读未提交使得事务之间隔离级别最低,所以并发程度最高,但会引入脏读问题。进而引入不可重复读、幻读问题。


(2) 读已提交 (read committed)

读已提交 (也叫提交读):在该隔离级别中,事务能读取到已经提交事务的数据,因此它不会有脏读问题。然而鉴于此,一个事务在不同时间的相同 SQL 查询中,可能会得到数据内容不同的结果,这种问题称之为不可重复读。


也就是说,读已提交使得事务之间隔离级别依旧较低,所以并发程度也就较高,但它解决了脏读问题。引入不可重复读问题,进而引入了幻读问题。


(3) 可重复读 (repeatable read)

可重复读:MySQL 默认的事务隔离级别。 可重复读有效地解决了 " 不可重复读 " 的问题,但还存在幻读的问题。所谓的幻读指的是,在同一事务的不同时间使用相同 SQL 查询时,会产生不同的记录数目。


(3) 串行化 / 序列化 (serializable)

串行化:事务最高隔离级别。它会强制事务排序,使之不会发生冲突,从而解决了脏读、不可重复读和幻读问题。但其执行效率低,所以真正使用的场景并不多。


5c872d19718a422e9a5e26ad7cadbfde.png



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
80 15
|
4天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
11天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
1月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
16天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
23天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
38 1
下一篇
DataWorks