mysql面试(一)

前言

从今天开始,更新一些mysql的基础知识,面试会遇到的知识点之类的内容。比如四个隔离级别,mvcc机制,三大日志,索引,B+树的形成等等,从数据库的底层来剖析索引和树是怎么形成的,以及查询缓存这些内容。
各位看官如果有想要了解的某些知识点,无论是mysql还是其他,都可以留言,会尽量及时回复的。

基础

三大范式

1、保持每列数据的原子性,比如客户信息表就是只有客户信息,不能存储订单信息
2、确保表中每列都和主键相关:一行数据只做一件事,如果数据有重复,就要拆分开来,比如客房信息表中有客户,那么一个客户可以定多个房间,这样客户信息就重复了。
3、每一列数据都应该和主键直接相关:比如一张表中有人员名单还有单位信息,那么这就是
人员id–人员信息–单位信息,应该把单位信息拆分出来

事务特性

ACID
A 原子性:Atomic在一个事务中,一堆sql,要么一起成功,要么一起失败,不存在某些成功某些失败的问题
C一致性:Consistency对于数据来说,一个事务执行完成之后,事务中所变更的数据都是要一致的,不能存在事务提交之后数据没有变更这种情况。
I 隔离性:Isolation各个事务之间不应该穿插执行,每个事务有自己独立执行的时间。
D持久性:Durability数据修改之后是永久存在的

四个隔离级别

读未提交

Read Uncommitted:这个很坑爹,就是说某个事务还没提交的时候,修改的数据,就让别的事务给读到了,这就恶心了,很容易导致出错的。这个也叫做脏读。

读已提交

Read Committed(不可重复读):这个比上面那个稍微好一点,但是一样比较尴尬,就是说事务A在跑的时候, 先查询了一个数据是值1,然后过了段时间,事务B把那个数据给修改了一下还提交了,此时事务A再次查询这个数据就成了值2了,这是读了人家事务提交的数据啊,所以是读已提交。这个也叫做不可重复读,就是所谓的一个事务内对一个数据两次读,可能会读到不一样的值。

可重复读

Read Repeatable:这个就是比上面那个再好点儿,就是说事务A在执行过程中,对某个数据的值,无论读多少次都是值1;哪怕这个过程中事务B修改了数据的值还提交了,但是事务A读到的还是自己事务开始时这个数据的值。

串行化

幻读,不可重复读和可重复读都是针对两个事务同时对某条数据在修改,但是幻读针对的是插入,比如某个事务把所有行的某个字段都修改为了2,结果另外一个事务插入了一条数据,那个字段的值是1,然后就尴尬了。第一个事务会突然发现多出来一条数据,那个数据的字段是1。如果要解决幻读,就需要使用串行化级别的隔离级别,所有事务都串行起来,不允许多个事务并行操作。
MySQL的默认隔离级别是Read Repeatable,就是可重复读,就是说每个事务都会开启一个自己要操作的某个数据的快照,事务期间,读到的都是这个数据的快照罢了,对一个数据的多次读都是一样的。

系统交互

首先,我们使用现在使用mysql的时候,都是直接在工程中引入mysql驱动包,spring boot会自动帮我们建立连接池,底层会和数据库建立网络连接,然后我们通过java程序来进行crud的处理逻辑,然后把sql告诉驱动,由它来告知数据库进行后续的处理。
关键字:连接池
在我们系统中,同一时刻一般都是由多个线程在处理的,因为用户不会商量好什么时候访问。所以在多个用户同时访问的时候,java肯定会同时处理多个请求,也就是需要和mysql进行多次交互。那么如果每次交互都建立一个新的连接,使用完就销毁的话。肯定会有大量的资源耗费在创建、销毁连接这种动作上。
所以一般都是使用一个连接池来控制多个请求。池子里直接拿现有的数据库连接,用完再放回去,等待下一个请求的使用。这样就不用频繁的建立和销毁连接了。连接池会自动维护系统与数据库直接的连接。
这些内容,在我们配置系统数据库的时候都是可以自定义的,如图:
在这里插入图片描述
然后由于每个线程都有自己的执行操作流程,所以就会产生多事务并发的问题,这都是老生常谈的了,四个问题对应四个事务的隔离级别巴拉巴拉。

mysql架构

在我们真实的开发过程中,是不需要知道mysql底层是什么样执行,怎么解析,怎么处理,怎么缓存的,它对于我们来说就是一个黑盒。但是。。。

网络连接要交给线程

因为所有的系统运行都是由线程来操作的,那么mysql接收到网络连接之后,肯定是要有一个监听线程先感知到,然后再说请求后面的处理流程

sql接口

当mysql接收到一个网络请求之后,会取出其中的sql语句,交给sql接口去执行。它是mysql的一个组件,专门用来接收sql语句,然后执行后面的操作

查询解析器

sql接口获取到语句之后,就需要这个查询解析器组件。它会把sql语句按照规则来解析,如果是select就去查询,如果是insert语句就去插入。

查询优化器

解析完sql之后,就要看这个语句怎么执行怎么查询数据才是最优解,最节省资源。这里就是处理where后面的条件,该用什么字段来匹配数据,优先用什么字段来匹配数据是最快能定位到数据,用哪个索引是最快速的。

执行器

这一步就已经要到操作层面了,这一步是什么,下一步是什么,会通过执行器来告诉下一个组件

存储引擎

这一步就接触到真正的数据了,根据执行器的指令来操作磁盘或者缓存中的各种数据,有些是直接从内存中取得,有些需要从磁盘中来拿。具体先更新哪个,先查询哪个,是由存储引擎来判断的
大致的流程如图:
在这里插入图片描述

未完待续

预告

下一篇是数据更新流程,会涉及到三大日志

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

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

相关文章

接口自动化测试框架实战-0-项目功能概览

熟悉我CSDN的朋友们应该知道,之前已经更新了requests、pytest、allure2、yaml、jenkins、postman等基础知识的合集。相信大家对接口测试已经有了全面的认识,现在应该迫不及待地想要一个实战项目了。接下来的文章中,我们将把这些知识点串联起来…

C++学习笔记02-结构基础(问题-解答自查版)

前言 以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。 本文对读者可以用作自查,答案在后面&#xff0…

【Linux】HTTP 协议

目录 1. URL2. HTTP 协议2.1. HTTP 请求2.2. HTTP 响应 1. URL URL 表示着是统一资源定位符(Uniform Resource Locator), 就是 web 地址,俗称“网址”; 每个有效的 URL 可以通过互联网访问唯一的资源, 是互联网上标准资源的地址; URL 的主要由四个部分组成: sche…

学习测试10-3自动化 web自动化

web自动化 chrome驱动下载地址: https://registry.npmmirror.com/binary.html?pathchromedriver/ https://googlechromelabs.github.io/chrome-for-testing/#stable观察Google版本,下相应的驱动 运行代码试试,成功Google就会弹出 from se…

华为OD机试2024年C卷D卷 - 山脉的个数/攀登者1 (Java)

华为OD机试(C卷D卷)2024真题目录 题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如&#xff…

ARM 单片机裸机任务调度框架

前言: 在没有使用操作系统的情况下,一个合理的裸机任务调度方式,可以更好的提供数据的处理,和用户体验,有多种任务调度的方式。 方案 1: 从上到下的任务调度方式,C语言程序的代码是在main函数…

K8S 上部署 Prometheus + Grafana

文章目录 一、使用 Helm 安装 Prometheus1. 配置源2. 下载 prometheus 包3. 安装 prometheus4. 卸载 二、使用 Helm 安装 Grafana1. 配置源2. 安装 grafana3. 访问4. 卸载 一、使用 Helm 安装 Prometheus 1. 配置源 地址:https://artifacthub.io/packages/helm/pro…

[路由器]IP-MAC的绑定与取消

背景:当公司的网络不想与外部人员进行共享,可以在路由器页面配置IP-MAC的绑定,让公司内部人员的手机和电脑的mac,才能接入到公司。第一步:在ARP防护中,启动IP-MAC绑定选项,必须启动仅允许IP-MAC…

linux、windows、macos清空本地DNS缓存

文章目录 Linux:Windows:macOS: Linux: 对于使用systemd的操作系统(如CentOS 7、Ubuntu 16.04),可以使用以下命令重启systemd-resolved服务来清除缓存: sudo systemctl restart sys…

【ELK】window下ELK的安装与部署

ELK的安装与部署 1. 下载2. 配置&启动2.1 elasticsarch2.1.1 生成证书2.1.2 生成秘钥2.1.3 将凭证迁移到指定目录2.1.4 改配置2.1.5 启动2.1.6 访问测试2.1.7 生成kibana账号 2.2 kibana2.2.1 改配置2.2.2 启动2.2.3 访问测试 2.3 logstash2.3.1 改配置2.3.2 启动 2.4 file…

你了解你的GD32 MCU系统主频是多少吗 ?

系统时钟是GD32 MCU的时基,可以理解为系统的心跳,片上所有的外设以及CPU最原始的时钟都来自于系统时钟,因而明确当前系统时钟是多少非常重要,只有明确了系统时钟,才能够实现准确的定时、准确的采样间隔以及准确的通信速…

通过QT基于C++实现串口通信

1.软件下载 本文所用到的所有软件都在以下连接可以下载 QT下载(注意下载路径最好全英,不要出现中文容易有bug) 链接:https://pan.baidu.com/s/1XCPlTBQ8fBOKBYO-H0mSVg?pwdm28f 提取码:m28f 串口工具下载 链接&…

二十、Qt位置相关函数

目录 一、函数概述 二、函数实践 三、总结 一、函数概述 Qt 提供了很多关于获取窗体位置及显示区域大小的函数,如 x()、y()和 pos()、react()、size()、geometry()等,统称为“位置相关函数”或“位置函数”, 如下图所示是几种主要的位置函数…

JS 鼠标拖动实现移动滚动条的滚动效果

效果 现在很多场景都以移动端为基本开发,比如说需要隐藏滚动条,在pc上实现鼠标拖动和手机触摸拖动差不多的效果。 实现 以mdn的overflow属性中范例为基础,内容溢出时候可使用overflow: auto;和overflow: scroll;实现滚动效果。 要实现鼠标…

华为防火墙总部与分支机构建立IPsec VPN涉及NAT穿越

一、IPsec VPN基本概念 1、隧道建立方式:分为手动建立和IKE自动协商,手动建立需要人为配置指定所有IPsec建立的所有参数信息,不支持为动态地址的发起方,实际网络中很少应用;IKE协议是基于密钥管理协议ISAKMP框架设计而…

一文看懂AI的 Transformer 架构!

1 AI的转换器是啥? 转换器,一种将输入序列转换或更改为输出序列的神经网络架构。它们通过学习上下文和跟踪序列组件之间的关系来做到这一点。例如,请考虑以下输入序列:“天空是什么颜色的?” 转换器模型会使用内部数学…

C4D2024软件下载+自学C4D 从入门到精通【学习视频教程全集】+【素材笔记】

软件介绍与下载: 链接: 链接:https://pan.baidu.com/s/1n8cripcv6ZTx4TBNj5N04g?pwdhfg5 提取码:hfg5 基础命令的讲解: 掌握软件界面和基础操作界面。学习常用的基础命令,如建模、材质、灯光、摄像机…

TypeScript体操(一):从基础到进阶

目录 前言Utility Types 是什么?常用 Utility Types前置知识typeofkeyoftypeof 和 keyof 的区别never 关键字extends 关键字结合条件判断infer 类型推断(模式匹配)判断是与非判断两个类型是否相等或兼容 循环递归嵌套字符串数组协变&#xff…

NMEA2000在船舶控制系统中航空插头插座组件特性

NMEA2000在船舶控制系统中的应用概述 NMEA2000协议是船舶电子设备之间通信的国际标准,广泛应用于船舶导航、监控和自动化系统。它基于CAN(Controller Area Network)总线技术,以确保在恶劣环境下的可靠性和效率。NMEA2000协议定义了…

英语语法第八课副词

文章目录 1、副词分类1.1 时间副词,表示时间或频率1.2 地点副词,表示地点或位置1.3 方式副词,表示行为方式1.4 程度副词,表示动作程度1.5 疑问副词,引导特殊疑问句1.6 强调副词,强调形容词或动词1.7 连接副…