MySQL最实用面试题(2024-3-14持续更新中)

MySQL篇面试题

一、介绍

​ 这是由小龙同学自己总结领悟的mysql面试题的解析,也是面试宝典

二、题目

1.数据库三大范式:

–作用:

​ 使表结构清晰,减少数据冗余(简单讲就是重复),提高查询和存储效率

–三大范式:

​ ①第一范式:保证每个列的原子性既不可拆分,举例说明:比如说,我最近项目中的保存客户信息列中,不能存在客户信息列,因为它可以拆分为客户姓名列,客户电话列

​ ②第二范式:保证每个列直接依赖于主键,举例说明:比如说,我最近项目中的商品订单表,里面开始设计为:商品编号,商品名称,商品价格,店铺名称,店主名称

​ 这是有问题的,店铺名称,和店主名称,都不依赖商品id

​ 且:数据容易冗余–假如店铺A有可乐商品,店铺B也有,那么可乐商品要重复

​ 如果雪碧商品都属于两个店铺有的,那么店铺A、B都又一次重复

​ 数据更新异常:店铺A名称改成,店铺C,那么行内所有店铺A都需要更新

​ 等等问题

​ 修改需要拆分为店铺信息表:店铺名称,店主名称

​ 然后商品订单表设计就是:商品编号,商品名称,商品价格

​ ③第三范式:非主键字段之间不能出现传递依赖的关系

​ 拿这张表来说:商品ID,商品名称,所在店铺,店铺名称,店主名称

​ 店铺名称,和店主名称都不直接依赖商品ID,而是直接依赖所在店铺,那么就可以靠店铺名称和店主名称来传递数据,所以就存在传递依赖关系

​ 可以拆分为:

​ 商品订单表:商品ID,商品名称,所在店铺

​ 店铺信息表:店铺ID,店铺名称,店主名称

​ 这样就符合三大范式了

2.MySQL数据库引擎有哪些

–MYISAM:全表锁

​ ①优势:执行速度快,占用空间小

​ ②缺点:不支持事务,不支持外键,并发性能差

​ ③业务:多适用于主要依赖Select、Insert的业务中

–InnoDB:行级锁

​ ①优势:支持事务,具有提交回滚功能,支持外键,自动增长列,并发能力强

​ ②缺点:执行速度相对MYISAM较差一点,占用空间是MYISAM的2.5倍

​ ③业务:相对更适合业务复杂的场景,比如银行转账,崩溃时能够回滚

–Memory:全表锁

​ ①优势:存储在内存中,执行速度快,默认使用HASH索引检索数据,检索效率高

​ ②缺点:因为存在在内存中数据安全性低,容易丢失,不适用范围查询

​ ③业务:主要适用于那些内容变化不繁琐的代码表

–MERGE:全表锁

​ 是一组MYISAM表的组合

3.聚集索引和非聚集索引

–聚集索引:

​ 拿没有目录的字典来说,我们只有abc字母来查询,当我们要查询 ‘’安’‘ 字时,得先根据读音 an 的a先开始找,我们要翻到a的部分,然后在根据a区里面的n区查找(遵循了最左前缀的匹配原则:即不是从最左开始查询,就无法找到数据) ,找到后我们能看到 ’‘安‘’ 字的所有信息

​ 即:

​ --聚集索引的索引是有顺序的

​ --聚集索引的索引和数据是在一起的

​ --所以找到文件后不需要再根据索引去回表查询

–非聚集索引:

​ 继续拿字典来说,不过现在的字典是有目录的,当我们要查询 ‘’张‘’ 字时 我们可以根据他的部首 弓 在目录里面找到这个字,然后我们就能得知这个字的具体内容哪个页码我们就能去查找到具体内容了

​ 即:

​ --非聚集索引是没有顺序的

​ --非聚集索引和数据是分离的

​ --所以找到文件后需要进行回表查询

4.InnoDB与MYISAM的区别

​ --InnoDB支持事务,MYISAM不支持,而对于InnoDB的每条SQL都作为一个事务自动提交,这样很影响效率,所以最好就是将多条SQL语句放在begin和commit之间,组成一个事务一起提交

​ --InnoDB支持外键,MYISAM不支持,所以一个包含外键关系的InnoDB表无法转换为MYISAM引擎的表

​ --InnoDB是聚集索引,数据文件和索引绑定在一起,必须有主键,通过主键查找数据效率很高。不过辅助索引(聚集索引=辅助索引,二级索引)是通过查询到主键,再通过主键查询到数据,需要二次查询,所以主键不应过大。MYISAM非聚集索引,数据文件是分离的,主键索引和辅助索引都是分离的

​ --InnoDB不保存具体行数,执行查询行数的SQL时,会进行全表扫描,而MYISAM保存了表的行数,查询总行数的时候,只需要读取该变量出来即可,速度很快

5.hash索引

–适用于等值查询:

​ hash索引在范围查询时,因为hash函数的转换的哈希码作为键,然后数据作为值,的键值存入一个确定的存储桶中。这样我们可以根据hash码快速定位到桶的位置

–检索效率高:

​ 通过哈希函数将关键字转换成哈希码,可以直接定位到数据的存储位置,避免了逐条比较的过程,因此查找速度非常快。

–不适合范围查询:

​ 这是因为相邻的数据可能会被存入不相邻位置的桶中,这样数据的位置是无序的,范围查询时想要找到多个数据就得重复进行多次全表扫

6.MySQL索引分类

–按数据结构分类
结构/引擎InnoDBMYISAMMemory
B+Tree索引
Hash索引××
Full-text索引√(MySQL5.6.4后)×
–按物理存储分类

​ 分为:聚集索引,非聚集索引(也叫辅助索引,二级索引)

–按字段特性分类

​ 分为:主键索引,唯一索引,全文索引,普通索引

7.MVCC详细理解

​ --当前读需要加锁实现。快照读就是基于MVCC实现,不加锁的SQL操作,不过可能读到的是之前版本的历史数据,mvcc目的就是不去竞争锁,从而减少系统性能开销

​ --四种特性:

​ 原子性:利用undo log实现

​ 持久性:利用redo log实现

​ 隔离性:通过加锁以及MVCC共同实现

​ 串行化:

​ --MVCC实现原理:

​ 通过undo log、版本链、Read View实现

在这里插入图片描述

​ Read View能让你知道你要在这些版本中去选择哪一个版本

​ --Read View

​ ①ReadView有的东西

在这里插入图片描述

m_ids表示生成‘Read View’时当前系统中活跃的读写事务的‘事务id’列表未提交的事务【90 100 200】
min_trx_id表示生成‘Read View’时当前系统中活跃的读写事务中最小的‘事务id’,也就是‘m_ids’中的最小值也就版本链尾的事务【90】
max_trx_id表示系统中应该分配给下一个事务的‘id’值【201】
creator_trx_id表示生成该‘ReadView’的事务的‘事务id’最新的事务创建ReadView所以id为【201】

​ ②ReadView任何判断版本呢链中哪个版本可用?

​ 1-当前事务id == 生产该事务的事务id(trx_id==creator_trx_id)其实就是自己事务,肯定可以看的

​ 2-当前事务id < undo log中最小活跃事务id(trx_id<min_trx_id)其实就是已提交才可用

​ 3-当前事务id > 表示下一个undo log记录的数据的事务id(trx_id > max_trx_id): 不可以访问这个版本

​ 4-(min_trx_id <= trx_id <= max_trx_id) : 如果trx_id在m_ids中是不可以访问这个版本的,反之可以

​ --按照顺序走判断,只要有一个判断成功就进行返回这个数据,可以实现查询到的是已经提交的数据,解决了脏读

​ --同时呢,只要查询一次就产生一个ReadView就能解决不可重复读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/279075.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《探索AI辅助研发的未来之路》

在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到各个领域&#xff0c;其中之一便是研发领域。AI辅助研发正以惊人的速度改变着我们对于创新和发现的理解。本文将从技术进展、行业应用、挑战与机遇、未来趋势、法规影响以及人才培养等方…

STP环路避免实验(华为)

思科设备参考&#xff1a;STP环路避免实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 Spanning Tree Protocol&#xff08;STP&#xff09;&#xff0c;即生成树协议&#xff0c;是一种数据链路层协议。主要作用是防止二层环路&#xff0c;并自适应网络变化和故障…

Vue+SpringBoot打造民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

GPT-5:人工智能的下一个前沿即将到来

当我们站在人工智能新时代的门槛上时&#xff0c;GPT-5即将到来的呼声愈发高涨且迫切。作为革命性的GPT-3的继任者&#xff0c;GPT-5承诺将在人工智能领域迈出量子跃迁式的进步&#xff0c;其能力可能重新定义我们与技术的互动方式。 通往GPT-5之路 通往GPT-5的旅程已经标记着…

鸿蒙-自定义组件的生命周期

目录 自定义组件的生命周期 1.aboutToAppear 2.aboutToDisappear 3.onPageShow 4.onPageHide 5.onBackPress 日志输出 1.显示页面 2.页面点击返回按钮 3.页面跳转 4.页面返回 自定义组件的生命周期 先来一段列子 import router from ohos.router Entry Component…

如何对医院运营管理进行3D可视化监控?推荐帆软智慧医院建设

智慧医院是运用云计算、大数据、物联网、移动互联网和人工智能等技术&#xff0c;通过建立互联、物联、感知、智能的医疗服务环境&#xff0c;整合医疗资源&#xff0c;优化医疗服务流程&#xff0c;规范诊疗行为&#xff0c;提高诊疗效率&#xff0c;辅助临床决策和医院管理决…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)

显示一段文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含Span和ImageSpan子组件。 接口 Text(content?: string | Resource, value?: TextOptions) 从API versi…

四.排序(冒泡/选择)

目录 11-排序介绍 常见排序算法: 12-冒泡排序介绍 代码要求: 思路: 13-冒泡排序 代码: 14-选择排序 简单写法: 好的写法: 11-排序介绍 排序&#xff1a;将一组“无序”的记录序列调整为“有序”的记录序列。 列表排序&#xff1a;将无序列表变为有序列表 输入&#…

Samtec科普 | 一文了解患者护理应用连接器

【摘要/前言】 通过医疗专业人士为患者提供护理的种种需求&#xff0c;已经不限于手术室与医院的各种安全状况。当今许多患者的护理都是在其他环境进行&#xff0c;例如医生办公室、健康中心&#xff0c;还有越来越普遍的住家。尤其是需要长期看护的患者&#xff0c;所需的科技…

达梦数据库SQL

达梦JSON函数技术文档 SQL中关键词处理 -- 必须要使用双引号包裹 select id,"comment" from t_cmp_rd_process;select id,"commit" from t_cmp_rd_gjj_eva;JSON_EXTRACT函数 -- party_sup_other_json 是包含JSON数据的列名。 -- $.content_abstract 是J…

Vue.js 应用实现监控可观测性最佳实践

本文由观测云团队编写~ 前言 Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 …

DNF的概念和操作命令

yum是linux系统中基于rpm包管理的一种软件管理工具。 在dnf.conf文件中&#xff0c;我们可以配置某个网络服务器位软件源仓库。配置的方法&#xff0c;就是用vim编辑/etc/dnf/dnf.conf这个文件。

可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性

随着数字技术的飞速发展&#xff0c;建筑行业也在不断迈向数字化转型的道路。在这个过程中&#xff0c;BIM&#xff08;Building Information Modeling&#xff0c;建筑信息模型&#xff09;技术已经成为建筑设计、施工和管理领域中的一项重要工具。 而在BIM的应用中&#xff…

【01】htmlcssgit网络基础知识

一、html&css 防脱发神器 一图胜千言 使用border-box控制尺寸更加直观,因此,很多网站都会加入下面的代码 * {margin: 0;padding: 0;box-sizing: border-box; }颜色的 alpha 通道 颜色的 alpha 通道标识了色彩的透明度,它是一个 0~1 之间的取值,0 标识完全透明,1…

机器学习-04-分类算法-03KNN算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与knn算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

【计算机网络篇】物理层(2)传输方式

文章目录 &#x1f354;传输方式⭐串行传输和并行传输⭐同步传输和异步传输&#x1f388;同步传输&#x1f388;异步传输 ⭐单向通信&#xff0c;双向交替通信和双向同时通信 &#x1f354;传输方式 在物理层中&#xff0c;传输方式是指数据在传输介质中传输的方式和方法。常见…

js判断对象是否有某个属性

前端判断后端接口是否返回某个字段的时候 <script>var obj { name: "John", age: 30 };console.log(obj.hasOwnProperty("name")); // 输出 trueconsole.log(obj.hasOwnProperty("email")); // 输出 falselet obj11 { name: "Joh…

小土堆深度学习笔记

pytorch安装&#xff0c;请查看上篇博客。 读取图片操作 from PIL import Imageimg_path "D:\\pythonProject\\learn_pytorch\\dataset\\train\\ants\\0013035.jpg" img Image.open(img_path) img.show()dir_path"dataset/train/ants" import os img_pa…

使用jQuery的autocomplete实现数据查询一次,联想自动补全

书接上回&#xff0c;上次说到在jsp页面中&#xff0c;通过监听输入框的数值变化&#xff0c;实时查询数据库&#xff0c;得到返回值使用autocomplete属性自动补全&#xff0c;实现一个联想补全辅助操作&#xff0c;链接&#xff1a;使用jquery的autocomplete属性实现联想补全操…

【黑马程序员】Python高阶

文章目录 闭包定义nonlocal关键字作用优缺点优点缺点 装饰器装饰器闭包写法 设计模式单例模式工厂模式优点代码示例 多线程基本概念threading模块 网络编程服务端开发socketsocket服务端编程 客户端开发 正则表达式正则的三个基础方法matchsearchfindAll 元字符匹配单字符匹配数…