面试真实经历某商银行大厂数据库MYSQL问题和答案总结(一)

在 MySQL 的面试中,涉及数据库存储引擎、ACID 特性、隔离级别、索引等方面的问题是非常常见的。本文将逐一解答一些常见的 MySQL 面试问题,并提供详尽的解释。​编辑


1. 数据库存储引擎 MyISAM 和 InnoDB 的区别

MyISAMInnoDB 是 MySQL 中常见的两种存储引擎,它们在许多方面存在差异:

特性 MyISAM InnoDB
事务支持 不支持事务(非事务型) 支持事务(事务型)
锁机制 表锁 行锁
外键约束 不支持外键 支持外键约束
数据存储方式 每个表对应一个 .MYD 文件和 .MYI 文件 数据和索引都存储在同一个表空间中
崩溃恢复 无自动崩溃恢复机制 自动崩溃恢复机制
适用场景 适用于读取较多的场景 适用于事务处理较多的场景

总结 :InnoDB 是更现代、功能更强大的存储引擎,适用于需要事务、外键约束以及更高并发的场景。MyISAM 更适合只读或查询频繁的应用。​编辑


2. InnoDB 什么时候是行锁,什么时候是表锁

InnoDB 使用 行锁表锁 来处理并发。

  • 行锁 :当你执行 UPDATEDELETESELECT ... FOR UPDATE 等操作时,InnoDB 会锁定当前行以避免其他事务修改该行数据。行锁通常在进行单行操作时发生。
  • 表锁 :当执行 ALTER TABLELOCK TABLES 等操作时,InnoDB 会使用表锁,锁住整个表,阻止其他事务对该表进行操作。

总结:InnoDB 默认使用行锁,只有在必须锁住整个表时才使用表锁。


3. ACID 特性

ACID 是数据库事务的四大特性,确保事务的可靠性和一致性:

  • 原子性(Atomicity):事务中的操作要么全部完成,要么全部不完成,不会留下半成品。
  • 一致性(Consistency):事务必须使数据库从一个一致的状态转换到另一个一致的状态。
  • 隔离性(Isolation):一个事务的执行不应受到其他事务的影响,每个事务的中间状态对其他事务是不可见的。
  • 持久性(Durability):事务一旦提交,对数据库的修改是永久性的,即使系统崩溃也不会丢失。

4. 隔离级别

数据库的隔离级别定义了不同事务之间相互干扰的程度。MySQL 支持以下四种隔离级别:

  1. READ UNCOMMITTED(读取未提交):事务可以读取其他事务尚未提交的数据,容易产生脏读(Dirty Read)。
  2. READ COMMITTED(读取已提交):事务只能读取其他事务已提交的数据,避免了脏读,但可能会产生不可重复读(Non-repeatable Read)。
  3. REPEATABLE READ(可重复读):事务在整个执行过程中读取的数据是固定的,避免了脏读和不可重复读,但可能会产生幻读(Phantom Read)。
  4. SERIALIZABLE(可串行化):事务完全隔离,强制串行执行,避免了所有并发问题,但性能最低。

总结 :根据应用的需求和并发程度选择合适的隔离级别。一般来说,REPEATABLE READ 是 MySQL 默认的隔离级别。


5. 数据库删除数据需要的方法,哪种最快,快在哪里

删除数据有多种方法,常见的有:

  • DELETE :逐行删除,支持 WHERE 子句,可以回滚。
  • TRUNCATE:删除表中所有数据,但不删除表结构,不能回滚。

最快方法TRUNCATEDELETE 快,因为 TRUNCATE 不会逐行删除数据,而是直接删除数据页并重新分配内存。DELETE 会逐行删除,并产生大量的日志。


6. MySQL 怎么实现分页

MySQL 中分页通常使用 LIMITOFFSET 来实现:

sql 复制代码
SELECT * FROM table_name LIMIT 10 OFFSET 20;  

或者简写为:

sql 复制代码
SELECT * FROM table_name LIMIT 20, 10;  

这条 SQL 查询语句返回从第 21 条记录开始的 10 条记录。

总结LIMIT 用于限制返回的记录数,OFFSET 用于指定开始的位置。


7. 数据库有哪些数据类型? ​编辑

MySQL 支持多种数据类型,常见的有:

  • 数值类型INTFLOATDOUBLEDECIMAL 等。
  • 字符类型CHARVARCHARTEXTBLOB 等。
  • 日期和时间类型DATETIMEDATETIMETIMESTAMP 等。
  • 枚举和集合类型ENUMSET
  • 布尔类型BOOLEAN(MySQL 实际上存储为 TINYINT)。编辑

8. VARCHAR 和 CHAR 的区别

  • CHAR:定长字符串,存储时如果字符串长度不足,会用空格填充。适合存储固定长度的字段(如国家代码)。
  • VARCHAR:变长字符串,存储时根据实际长度存储,不会填充空格。适合存储可变长度的字段(如名字、地址等)。

总结VARCHAR 更节省存储空间,CHAR 在需要固定长度时更高效。​编辑


9. 数据库的索引有哪些?

常见的数据库索引类型有:

  • 主键索引(PRIMARY KEY):每个表只能有一个主键,主键列自动创建唯一索引。
  • 唯一索引(UNIQUE):保证字段的值唯一,但可以有空值(NULL)。
  • 普通索引(INDEX):没有唯一性约束,仅用于提高查询性能。
  • 全文索引(FULLTEXT):用于全文搜索,适用于文本数据。
  • 复合索引(Composite Index) :由多个列组成的索引。编辑

10. B+ 树索引的叶子结点放的是什么?

B+ 树索引 中,叶子结点存储的是实际的 数据指向数据的指针。B+ 树是一种平衡树结构,所有的叶子结点都在同一层,并且通常会按照某种顺序排列,方便高效的查找。

总结:B+ 树的叶子结点存储着关键字及对应的记录位置,而非叶子结点只存储关键字和指向下一层的指针。

​编辑---

总结

本篇文章涵盖了 MySQL 中一些常见的面试问题,从存储引擎到索引、ACID 特性等,帮助你了解 MySQL 数据库的基础知识和常见面试考点。掌握这些知识,能够在面试中应对相关问题并展示你的数据库管理能力。

相关推荐
阿里嘎多学长24 分钟前
2026-07-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
止语Lab27 分钟前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活27 分钟前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
小蠢驴打代码31 分钟前
记忆库能通过测试,不等于回答值得信:Coding Agent Memory 的两层评估设计
github·ai编程
程序员天天困32 分钟前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn33 分钟前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户2986985301439 分钟前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户772831049084041 分钟前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金1 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
武子康1 小时前
Copilot Code Review 从固定 Reviewer 演进为可编程 Runtime,仓库控制面、Setup 供应链、Runner 资源和 MCP 工具同时被纳入审查决策
人工智能·github·aigc