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.mzph.cn/news/755807.shtml

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

相关文章

朋友圈运营小秘诀,让你事半功倍!

朋友圈已成为了现代社交的重要平台&#xff0c;如何在朋友圈中进行有效的运营&#xff0c;吸引更多的关注和互动&#xff0c;成为了许多人关注的焦点。 今天&#xff0c;我将分享一些朋友圈运营的小秘诀&#xff0c;帮助你事半功倍&#xff0c;让你的朋友圈更具吸引力&#xf…

Qt学习--多态(虚函数)

这次来分享多态的概念&#xff0c;这是比较重要的知识点 面向对象的三大特征&#xff1a;封装、继承、多态 首先&#xff1a;来点官方术语&#xff1a; 多态&#xff0c;通俗来讲就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出…

【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)

&#x1f48c; 所属专栏&#xff1a;【鸿蒙系统】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢…

实践致知第10享:将微信中的Excel保存到本地并编辑、修改

一、背景需求 小姑打电话问&#xff1a;学校在微信上发来的Excel表格&#xff0c;要求家长填报相关信息&#xff0c;不知道该怎么处理&#xff0c;于是我写了下面的操作步骤。 二、解决方案 1、在电脑上打开微信&#xff0c;选中Excel表格&#xff0c;右键选择“另存为”功能…

jQuery 常用API

一、jQuery 选择器 1.1 jQuery 基础选择器 原生 JS 获取元素方式很多&#xff0c;很杂&#xff0c;而且兼容性情况不一致&#xff0c;因此 jQuery 给我们做了封装&#xff0c;使获取元素统一标准。 1.2 jQuery 层级选择器 jQuery 设置样式 1.3 隐式迭代&#xff08;重要&…

魔搭×函数计算:一键部署,缩短大模型选型到生产的距离

引言 面对魔搭 ModelScope 社区提供的海量模型&#xff0c;用户希望快速进行选型并生产使用起来&#xff0c;但在此之前&#xff0c;却一定会面临算力管理难、模型部署难等一系列问题&#xff0c;那么能否实现快速把选定的模型部署在云端功能强大的 GPU 上&#xff0c;由云端负…

详析中间人问题

详析中间人问题 正常情况 中间人 如何解决呢&#xff1f; 加证书 证书也有公钥和私钥 具体步骤如下&#xff1a; 1.服务器生成非对称密钥对 私钥和公钥的生成&#xff1a;服务器使用非对称加密算法&#xff08;如RSA、ECDSA&#xff09;生成一对密钥&#xff0c;包括一个私钥…

最新Java面试题2【2024初级】

下载链接&#xff1a;博主已将以上这些面试题整理成了一个面试手册&#xff0c;是PDF版的 互联网大厂面试题 1&#xff1a;阿里巴巴Java面试题 2&#xff1a;阿里云Java面试题-实习生岗 3&#xff1a;腾讯Java面试题-高级 4&#xff1a;字节跳动Java面试题 5&#xff1a;字…

安卓RecyclerView简单用法

废话不多说上代码 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schem…

nuxt3项目总结

nuxt3项目总结 仓库 前言 大半年的时间&#xff0c;项目从秋天到春天&#xff0c;从管理后台到APP再到数据大屏&#xff0c;技术栈从vue3到uniApp再到nuxt3&#xff0c;需求不停的改&#xff0c;注释掉代码都快到项目总体的三分之一。 一、准备-搭建项目架子 1.1 创建一个…

弱电工程是什么意思

一、弱电工程的基本概念 智能建筑中的弱电主要有两类&#xff0c;一类是国家规定的安全电压等级及控制电压等低电压电能&#xff0c;有交流与直流之分&#xff0c;交流36V以下&#xff0c;直流24V以下&#xff0c;如24V直流控制电源&#xff0c;或应急照明灯备用电源。 另一类…

php沧州市人民医院患者就诊信息管理系统flask-django-nodejs-python

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 前台功能&#xff1a;首页、流程图、门诊部、公告信息、后台管理。 用户功能&#xff1a;首页、个人中心、就诊预约管理、诊断信息管理、重新排号管理、检查信息管理、患者病历管理、处方信…

MediaBox音视频终端SDK已适配鸿蒙星河版(HarmonyOS NEXT)

2024年1月&#xff0c;HarmonyOS NEXT 鸿蒙星河版系统开发者预览版开放申请&#xff0c;该系统将只能安装为鸿蒙开发的原生应用&#xff0c;而不再兼容安卓应用。对此&#xff0c;阿里云MediaBox音视频终端SDK产品已实现功能的鸿蒙化迁移和重构&#xff0c;全面适配鸿蒙系统Har…

代码算法训练营day8 | 344.反转字符串、 541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

day8:剩下的两题 151.翻转字符串里的单词卡码网&#xff1a;55.右旋转字符串 151.翻转字符串里的单词 题目链接 状态&#xff1a;不ok 文档&#xff1a;programmercarl.com 思路&#xff1a; 我们将整个字符串都反转过来&#xff0c;那么单词的顺序指定是倒序了&#xff0c;只不…

【2024.3.19练习】统计子矩阵

题目描述 题目分析 这道题一开始没有思路&#xff0c;使用蛮力枚举的方法时间复杂度为&#xff0c;显然超时。 参考题解后学会了化二维问题为一维问题&#xff0c;先使用的复杂度限制子矩阵的高度&#xff0c;再考虑列&#xff0c;这样就将子矩阵的和问题转变为了连续子序列的…

拿捏指针(三)

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 前言 在这之前我们学习了《拿捏指针&#xff08;一&#xff09;》&#xff0c;《拿…

重学SpringBoot3-函数式Web

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-函数式Web 函数式Web编程简介RouterFunctionRequestPredicateServerRequestServerResponse 好处示例结论 随着响应式编程范式的兴起和 Java 函数式编程能…

Spring之@Value注解

前言 Value注解在Spring的依赖注入中占据重要地位,这里对Value注解的作用进行演示以及扩展 作用 注入字符串注入属性注入bean其他 代码准备 创建两个普通的bean Component public class ValueComponent { } Component public class Foo {private String sign;public Foo…

day-24 不同路径

思路&#xff1a;动态规划&#xff0c;因为只能向下或向右移动&#xff0c;所以第一行和第一列的路径数皆为1&#xff0c;其余位置的路径数dp[i][j]dp[i-1][j]dp[i][j-1] 最后返回dp[m-1][n-1]即可 code: class Solution {public int uniquePaths(int m, int n) {int dp[][]n…

【通用知识】HttpServletRequest接口方法

一、前端知识概述 说明&#xff1a; 1、Headers和Payload为前端传给后端的请求头和请求参数信息。Preview和Response为后端返回的数据。 2、Payload标签内为前端传给后端的参数。其中&#xff0c;Query String Parameters中为问号传参&#xff0c;对应后端RequestParam方式&…