MySQL 数据库面试题

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 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



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
500 158
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1261 152
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
935 156
|
7月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
526 156
|
7月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
630 161
|
7月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
7月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
7月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
7月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
831 7

推荐镜像

更多