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就能解决不可重复读

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion + Segment Anything试用

安装 从continue-revolution/sd-webui-segment-anything安装插件分割模型下载后放到这个位置&#xff1a;${sd-webui}/extension/sd-webui-segment-anything/models/sam下&#xff0c;可以下载3个不同大小的模型&#xff0c;从大到小如下&#xff1a;vit_h is 2.56GB, vit_l i…

test测试类-变量学习

test测试类 作用&#xff1a;标记到类上成为测试类&#xff0c;标记到方法上成为测试方法 变量&#xff1a;测试类的变量&#xff0c;在测试类括号中应用 1、invocationCount变量 意思是这个方法应该被调用的次数。 在测试框架中&#xff0c;特别是当使用参数化测试或数据驱动…

游戏陪玩系统约玩系统交友系统功能介绍

游戏约玩系统是一个集动态社交、语聊交友、线上约玩、线下活动以及购物商城等功能于一体的综合性平台。以下是该系统的功能介绍&#xff1a; 一、首页 热门大神&#xff1a;展示平台上最受欢迎的玩家&#xff0c;方便用户快速找到高水平的游戏伙伴。附近大神&#xff1a;基于…

openGauss学习笔记-246 openGauss性能调优-SQL调优-经验总结:SQL语句改写规则

文章目录 openGauss学习笔记-246 openGauss性能调优-SQL调优-经验总结&#xff1a;SQL语句改写规则246.1 使用union all代替union246.2 join列增加非空过滤条件246.3 not in转not exists246.4 选择hashagg246.5 尝试将函数替换为case语句246.6 避免对索引使用函数或表达式运算2…

Android 系统如何添加开机自启动 Shell 脚本

添加开机自启动 Shell 脚本 很多时候&#xff0c;我们想在系统启动的时候干一些“私活”&#xff0c;这个时候&#xff0c;我们就可以添加开机自启动的脚本来完成。下面我们介绍一个简单的示例&#xff1a; 在 device/Jelly/Rice14 目录下添加如下的文件与文件夹&#xff1a;…

RPC 和 序列化

RPC 1 RPC调用流程 1.1 clerk客户端调用远程服务 Clerk::PutAppend() raftServerRpcUtil::PutAppend() raftServerRpcUtil是client与kvserver通信的入口&#xff0c; 包含kvserver功能的一对一映射&#xff1a;Get/PutAppend&#xff0c;通过stub对象——raftKVRpcProctoc:…

HarmonyOS NEXT应用开发—图片压缩方案

介绍 图片压缩在应用开发中是一个非常常见的需求&#xff0c;特别是在处理用户上传图片时&#xff0c;需要上传指定大小以内的图片。目前图片压缩支持jpeg、webp、png格式。本例中以jpeg图片为例介绍如何通过packing和scale实现图片压缩到目标大小以内。 效果图预览 使用说明…

Catmull-Rom P5 ThreeJs与前端

文章目录 问题Echarts 3D如何让曲线变得平滑&#xff1f;Echarts 2D图中平滑效果是如何实现的&#xff1f;如何在一个Echarts 3D图中画一个圆圈&#xff1f;如何在Echarts 3D图中画一个立方体&#xff1f; Catmull-Rom插值算法先来回答第二个问题回到第一个问题在Echarts 3D图中…

运维安全管理与审计系统(堡垒机)

一、什么是运维安全管理与审计系统 运维安全管理与审计系统&#xff08;俗称 “堡垒机”&#xff09;&#xff1a;是采用新一代智能运维技术框架&#xff0c;基于认证、授权、访问、审计的管理流程设计理念&#xff0c;实现对企事业IT中心的网络设备、数据库、安全设备、主机系…

Zustand极简的状态管理工具

介绍 一个小型、快速且可扩展的 Bearbones 状态管理解决方案。 Zustand 有一个基于 hooks 的舒适 API。它不是样板文件或固执己见&#xff0c;但有足够的惯例来明确和类似通量。 zustand官网 zustand使用方法及调试工具的安装使用 安装包 npm install zustand2.创建store仓…

【Unity投屏总结】投屏方案总结

【背景】 想方便自己在VR中工作&#xff0c;打算做一个能够挂多个屏幕的远程控制VR桌面。研究下来发现细分场景有很多&#xff0c;有点鱼和熊掌不可兼得的意味&#xff0c;细分如下。 【投屏场景与解决方案】 希望多人能够同时观看我的屏幕&#xff0c;也就是一屏投多屏&…

K8s的Pod出现Init:ImagePullBackOff问题的解决,(以calico网络插件为例)

问题描述&#xff1a; 对于这类问题的解决思路应该都差不多&#xff0c;本文以calico插件安装为例&#xff0c;发现有个Pod的镜像没有pull成功 第一步&#xff1a;查看这个pod的描述信息 kubectl describe pod calico-node-t9rql -n kube-system从上图发现是docker拉取"…

实体门店运营方案模板与策划技巧:轻松打造高效运营体系

在当今竞争激烈的商业环境中&#xff0c;实体门店的运营如同一场精密谋划的战役&#xff0c;需要精心策划和高效管理才能在市场中崭露头角。作为经营鲜奶吧5年时间的创业者&#xff0c;我深知成功的实体门店背后离不开一套完善的运营方案和策略。 在这篇文章中&#xff0c;我将…

基于java的宠物信息交流平台设计(含源文件)

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的“多鱼”旧物交易平台。当前的信息管理存在工作…

精酿啤酒:一口啤酒,一份享受

在繁华的都市生活中&#xff0c;我们总是匆匆忙忙&#xff0c;追求着各种目标和成就。然而&#xff0c;在这个过程中&#xff0c;我们往往忽略了生活的本质&#xff0c;那就是享受。而Fendi Club 啤酒&#xff0c;正是为那些追求品质生活的都市精英们量身打造的。 Fendi Club啤…

Java多线程自定义线程池——线程池的七大参数和四大拒绝策略

线程池 2.1 线程池思想 我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低系统…

Claude3介绍

英文介绍链接&#xff1a;Introducing the next generation of Claude \ Anthropic Anthropic这家由OpenAI分裂出去的兄弟公司&#xff0c;悄无声息地、低调地将Claude3推出了 免费版claude 3 sonnet使用网站&#xff08;国内镜像站&#xff09;&#xff1a;Claude 3 AI&…

106 基于消息队列来做 mysql 大数据表数据的遍历处理

前言 最近有这样的一个需求, 我们存在一张 很大的 mysql 数据表, 数据量大概是在 六百万左右 然后 需要获取所有的记录, 将数据传输到 es 中 然后 当时 我就写了一个脚本来读取 这张大表, 然后 分页获取数据, 然后 按页进行数据处理 转换到 es 但是存在的问题是, 前面 还…

【Micropython ESP32】pwm脉宽调制技术

文章目录 前言一、PWM脉宽调制技术介绍二、machine.PWM 类2.1 machine.PWM 类的构造对象2.2 PWM 对象初始化2.3 关闭PWM设备2.4 设置pwm的周期2.5 设置占空比 三、pwm示例代码总结 前言 在嵌入式系统和物联网应用中&#xff0c;控制电机、LED灯和其他设备的亮度或速度是常见的…

汽车电子零部件(8):T_Box

前言: 网联汽车(Connected Vehicles ,CV)是一个广泛的概念,四个主要的CV线程已发展起来:互联、自主、共享和电动。这些应用于包括CV在内的垂直领域:汽车、通信、互联网和共享手机服务。中国汽车工程师学会(SAEC)提倡将车载ADAS(高级驾驶员辅助系统)与通信技术相结合…