【面试宝藏】MySQL 面试题解析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL面试题解析涵盖数据库范式、权限系统、Binlog格式、存储引擎对比、索引原理及优缺点、锁类型、事务隔离级别等。重点讨论了InnoDB与MyISAM的区别,如事务支持、外键和锁机制。此外,还提到了Unix时间戳与MySQL日期时间的转换,以及创建索引的策略。

MySQL 面试题解析

1. 数据库三大范式是什么?

  • 第一范式(1NF):确保每列的原子性,即每列不能再分。
  • 第二范式(2NF):在满足 1NF 的基础上,每个非主属性完全依赖于主键,即消除部分依赖。
  • 第三范式(3NF):在满足 2NF 的基础上,任何非主属性不依赖于其他非主属性,即消除传递依赖。

2. MySQL 有关权限的表都有哪几个?

MySQL 的权限系统主要依赖以下系统表:

  • user:存储用户的全局权限。
  • db:存储特定数据库的权限。
  • tables_priv:存储特定表的权限。
  • columns_priv:存储特定列的权限。
  • procs_priv:存储存储过程和函数的权限。

3. MySQL 的 Binlog 有几种录入格式?分别有什么区别?

MySQL 的 Binlog 有三种格式:

  • Statement(语句):记录执行的 SQL 语句。优点是日志量小,但在某些情况下可能无法精确重放。
  • Row(行):记录每行数据的变化。优点是可以精确重放,但日志量大。
  • Mixed(混合):结合了 Statement 和 Row 的优点。MySQL 会根据具体情况选择最合适的格式。

4. MySQL 存储引擎 MyISAM 与 InnoDB 的区别?

  • 事务支持:InnoDB 支持事务,MyISAM 不支持。
  • 外键:InnoDB 支持外键,MyISAM 不支持。
  • 表锁和行锁:InnoDB 支持行级锁,MyISAM 只支持表级锁。
  • 崩溃恢复:InnoDB 有自动崩溃恢复功能,MyISAM 需要手动修复。
  • 全文索引:MyISAM 支持全文索引,InnoDB 从 MySQL 5.6 开始支持。

5. 什么是索引?

索引是一种用于提高数据库查询速度的数据结构。它类似于书籍的目录,可以快速找到所需的数据。

6. 索引有哪些优缺点?

优点

  • 提高数据检索速度。
  • 加速表连接操作。
  • 加速排序和分组操作。
  • 在条件查询中,提高检索效率。

缺点

  • 占用磁盘空间。
  • 在插入、删除和更新数据时,可能需要重建索引,影响写入性能。

7. 存储引擎有哪几种类型?

MySQL 支持多种存储引擎,常见的有:

  • InnoDB:支持事务和外键,使用广泛。
  • MyISAM:不支持事务,但速度较快。
  • MEMORY:数据存储在内存中,速度快,但断电数据丢失。
  • ARCHIVE:用于存储大批量的历史数据,支持高效的插入操作,不支持索引。
  • CSV:数据以 CSV 格式存储,便于与外部程序交互。

8. MySQL 中有哪几种锁?

  • 表锁:锁住整张表。分为读锁和写锁。
  • 行锁:锁住单行数据。InnoDB 支持行级锁。
  • 页锁:锁住数据页。InnoDB 也支持页锁,但不常用。

9. MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

  • 读未提交(Read Uncommitted):最低隔离级别,事务中的修改即使未提交,对其他事务也是可见的。
  • 读已提交(Read Committed):一个事务在提交前的修改对其他事务不可见。
  • 可重复读(Repeatable Read):事务在执行期间,看到的数据是一致的,即使其他事务进行了修改(默认隔离级别)。
  • 串行化(Serializable):最高隔离级别,事务完全串行化执行,避免了幻读。

10. CHAR 和 VARCHAR 的区别?

  • CHAR:定长字符类型,不足长度时会用空格补齐。适合存储定长数据。
  • VARCHAR:变长字符类型,存储的数据长度可变。适合存储可变长度的数据。

11. 主键和候选键有什么区别?

  • 主键(Primary Key):用于唯一标识表中的记录,每个表只能有一个主键,不能为空。
  • 候选键(Candidate Key):是唯一标识表中记录的属性集合,可以有多个候选键,其中一个可以作为主键。

12. 如何在 Unix 和 MySQL 时间戳之间进行转换?

  • Unix 时间戳转换为 MySQL 日期时间
    FROM_UNIXTIME(unix_timestamp)
    
  • MySQL 日期时间转换为 Unix 时间戳
    UNIX_TIMESTAMP(datetime)
    

13. MyISAM 表类型将在哪里存储,并且还提供其存储格式?

MyISAM 表的存储格式:

  • .frm 文件:存储表结构。
  • .MYD 文件:存储表数据。
  • .MYI 文件:存储表索引。

14. MySQL 里记录货币用什么字段类型好?

货币一般使用 DECIMAL 类型来存储,确保精度和防止舍入误差。例如:

DECIMAL(10, 2)

15. 创建索引时需要注意什么?

  • 选择合适的列:经常用于查询条件、排序和分组的列。
  • 避免过多的索引:每个索引都会占用空间和影响写入性能。
  • 复合索引:考虑创建复合索引,而不是多个单列索引。
  • 索引选择性:高选择性的列更适合作为索引。

版权声明

本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。

原文链接:CSDN

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
5月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
2月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
152 9
|
3月前
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与性能优化全解析
我整理的这份内容涵盖了 MySQL 诸多核心知识。包括查询语句的书写与执行顺序,多表查询的连接方式及内、外连接的区别。还讲了 CHAR 和 VARCHAR 的差异,索引的类型、底层结构、聚簇与非聚簇之分,以及回表查询、覆盖索引、左前缀原则和索引失效情形,还有建索引的取舍。对比了 MyISAM 和 InnoDB 存储引擎的不同,提及性能优化的多方面方法,以及超大分页处理、慢查询定位与分析等,最后提到了锁和分库分表可参考相关资料。
|
5月前
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
4月前
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
11月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?

推荐镜像

更多