news 2026/2/15 9:45:29

华为OD技术面真题 - 数据库Mysql - 1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD技术面真题 - 数据库Mysql - 1

文章目录

  • 什么是事务?介绍一下事务的特性
  • 介绍一下Mysql隔离级别,以及会存在什么问题
  • MyIASM和InnoDB的区别
  • SQL语句执行顺序
  • 数据库三大范式是什么
  • 数据库为什么使用B+树而不是B树
  • 为什么推荐使用自增主键

什么是事务?介绍一下事务的特性

事物简单理解为,将一系列的操作整合为一个操作,这些操作只能全部都成功或者全部都执行失败。

事务的四大特性(ACID):

  1. 原子性(Atomicity)
    • 单个事务,为一个不可分割的最小工作单元,指的是一个事务中的操作要么全部成功,要么全部失败
  2. 一致性(Consistency)
    • 事务的执行保证数据库的一致性。事务开始和结束时,数据库必须满足所有的完整性约束,即事务执行的结果必须使数据库从一个有效状态转变到另一个有效状态。
  3. 隔离性(Isolation):
    • 并发执行的多个事务之间应该相互隔离,每个事务都应该感知不受其他事务影响的中间状态。
    • 多个事务并发执行互不干扰。
  4. 持久性(Durability):
    • 事务一旦提交,结果永久生效。

介绍一下Mysql隔离级别,以及会存在什么问题

并发事务会出现的问题主要分为下面三种

  • 脏读(Dirty Read):
    • 可以读到另一个事务未提交的数据。
    • 一旦对方事务进行回滚,之前读取到数据被认为是脏数据。
  • 不可重复读(Non-repeatable Read):
    • 前后多次读取,数据内容不一致
    • 同一事务中,两次读取 同一行数据结果不同,原因就是事务运行过程中其它事务update行数据。
  • 幻读(Phantom Read):
    • 同一事务中,前后多次读取,数据总量不一致
    • 其他事务 insert / delete

Mysql有四种隔离级别分析:

  1. 读未提交(Read Uncommitted):
    • 特点:一个事务可以读到另一个未提交的事务数据
    • 会出现脏读、不可重复读、幻读问题。
  2. 读已提交(Read Committed):
    • 特点:只能读到已经提交的数据
    • 会出现不可重读、幻读问题。
  3. 可重复读(Repeatable Read)
    • 特点:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
    • 不会出现脏读、不可重读问题,并且Mysql的InnodDB在级别下通过MVCC和Next-Key Lock(间隙锁 + 行锁)机制,很大程度也解决了幻读问题。
  4. 可串行化(SERIALIZABLE):
    • 特点:最高事务隔离级别,所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰。
    • 不会出现脏读、不可重复读、幻读问题。性能较差。

MyIASM和InnoDB的区别

比较点MyISAMInnoDB
存储结构每张表被存放在三个文件:frm-表定义、MYD-数据文件、MYI-索引文件所有表信息都保存在一个数据文件(数据过大,可能拆分为多个保存)
存储顺序按照记录插入顺序保存按主键大小有序插入
外键不支持支持
事务不支持支持
锁支持只支持表锁支持表锁、行锁。行锁力度,并发能力强

两种存储引擎适用场景:

  • MyISAM:无需支持事务、外键、行锁的情景,并且读多写少的场景。

  • InnoDB: 更新、操作频繁以及需要保证数据完整,并发量需要高的。需要支持事务、外键、行锁的场景。(现在一般都选这个)

SQL语句执行顺序

SELECT DISTINCT()..c FROM T1,T2 ON < ON 条件> WHERE <WHERE 条件> GROUP BY c1,c2 HAVING <条件> ORDER BY <排序规则>
  1. FROM:对FROM子句中的前两个表执行交叉连接,生成虚拟表VT1。
  2. ON:对VT1应用ON筛选器,只有筛选通过才保存到虚拟表VT2。
  3. WHERE: 对VT2表应用WHERE筛选器,只有筛选通过的记录才保存到VT3.
  4. GROUP BY: 按照GROUP BY子句中的列列表对VT3进行分组,生成VT4
  5. Having :对VT4表应用Having筛选器,只有通过筛选的行才会插入VT5
  6. SELECT: 处理SELECT列表,生成VT6
  7. DISTINCT: 将重复行移除VT6,产生VT7
  8. ORDER BY: 将VT7中行按照ORDER BY 子列表排序规则进行排序,生成VT8

数据库三大范式是什么

第一范式:每个列都不可以再拆分,属性不可分割。

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。(要有主键,其他字段都依赖于主键)

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键(消除传递依赖,消除冗余,就是各种信息只在一个地方存储,不出现在多张表中)。

在设计数据库表结构的时候,要尽量遵守三大范式,如果不遵守,必须有足够的理由。

数据库为什么使用B+树而不是B树

  • B+树的叶子节点存储了所有的数据,非叶子节点中存储的是比较关键字。而B树所有的节点都会存储数据。B+树的叶子节点之间存在一个指针连接,B树不存在指针连接。B+树这种设计结构能带来什么好处呢?B+树所有的数据都存储在叶子节点,那么顺着叶子节点从左往右即可完成对数据的遍历,极大了简化了排序操作。这也是mysql设计索引是采用B+树的原因,不仅仅能方便查找,而且有助于排序,在mysql的索引中叶子节点之间数双向链表可正反遍历,更加灵活;

  • B树只适合随机检索,而B+树同时支持随机检索和顺序检索

  • B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。B+树的内部结点并没有指向关键字具体信息的指针,只是作为索引使用,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了。而IO读写次数是影响索引检索效率的最大因素;

  • B+树的查询效率更加稳定。B树搜索有可能会在非叶子结点结束,越靠近根节点的记录查找时间越短,只要找到关键字即可确定记录的存在,其性能等价于在关键字全集内做一次二分查找。而在B+树中,顺序检索比较明显,随机检索时,任何关键字的查找都必须走一条从根节点到叶节点的路,所有关键字的查找路径长度相同,导致每一个关键字的查询效率相当。

  • B-树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作。

为什么推荐使用自增主键

  1. InnoDB中默认数据按照主键大小排序保存,自增主键可以保证插入按顺序插入,无需移动记录,插入效率高。
  2. 自增主键为整型类型,占用空间小,并且排序快。
  3. 自动保证主键不发生冲突,不需要开发人员主动处理主键不重复问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/14 6:27:51

小白也能用的股票分析神器:5步完成专业报告生成

小白也能用的股票分析神器&#xff1a;5步完成专业报告生成 1. 这不是另一个“AI炒股工具”&#xff0c;而是一个真正能帮你理清思路的私有化助手 你有没有过这样的经历&#xff1a;看到一只股票涨得不错&#xff0c;想深入了解&#xff0c;却卡在第一步——不知道从哪查起&a…

作者头像 李华
网站建设 2026/2/12 22:31:38

RexUniNLU零样本模型:中文关系抽取实战教程

RexUniNLU零样本模型&#xff1a;中文关系抽取实战教程 1. 为什么你需要这个零样本关系抽取工具 你是否遇到过这样的问题&#xff1a;手头有一批中文新闻或企业文档&#xff0c;想快速找出“谁创办了哪家公司”“某产品由哪个团队研发”这类关键信息&#xff0c;但又没有标注…

作者头像 李华
网站建设 2026/2/11 9:52:12

亲测GLM-4.6V-Flash-WEB,图文理解效果惊艳真实体验分享

亲测GLM-4.6V-Flash-WEB&#xff0c;图文理解效果惊艳真实体验分享 上周收到团队消息说智谱新推了一款轻量视觉模型&#xff0c;名字很直白——GLM-4.6V-Flash-WEB。没看文档前我下意识以为又是参数裁剪版&#xff0c;直到点开网页推理界面&#xff0c;上传一张带表格的会议纪…

作者头像 李华
网站建设 2026/2/8 10:20:51

告别命令行!科哥WebUI版Z-Image-Turbo手把手教学

告别命令行&#xff01;科哥WebUI版Z-Image-Turbo手把手教学 1. 为什么你需要这个WebUI&#xff1f;——从“看得懂”到“点就出图” 你是不是也经历过这些时刻&#xff1a; 看完一篇教程&#xff0c;信心满满打开终端&#xff0c;敲下conda activate ...&#xff0c;结果卡…

作者头像 李华
网站建设 2026/2/12 2:19:24

3D Face HRN效果展示:生成可用于Unity HDRP管线的PBR材质UV贴图示例

3D Face HRN效果展示&#xff1a;生成可用于Unity HDRP管线的PBR材质UV贴图示例 1. 这不是普通的人脸建模&#xff0c;是能进Unity HDRP管线的“真PBR贴图” 你有没有试过在Unity里做高保真数字人&#xff1f;可能第一步就卡在——哪来的高质量人脸贴图&#xff1f;找美术手绘…

作者头像 李华
网站建设 2026/2/6 22:38:54

手把手教你用vLLM部署GLM-4-9B-Chat:1M上下文超长对话体验

手把手教你用vLLM部署GLM-4-9B-Chat&#xff1a;1M上下文超长对话体验 1. 为什么你需要这个镜像 你有没有遇到过这样的问题&#xff1a; 想让AI记住整本产品文档&#xff0c;但模型一问三不知&#xff1f;做法律合同分析时&#xff0c;刚读完前50页&#xff0c;再问后30页内…

作者头像 李华