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.rhkb.cn/news/381872.html

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

相关文章

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(五)

一、MD5算法分析 : 1.1 关于MD5 “消息摘要”是指MD5(Message Digest Algorithm 5)算法。MD5是一种广泛使用的密码散列函数,它可以生成一个128位(16字节)的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

算法017:二分查找

二分查找. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/ 二分查找,其实是双指针的一种特殊情况,但是时间复杂度极低&#…

Web前端:HTML篇(一)

HTML简介: 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器…

MongoDB教程(十三):MongoDB覆盖索引

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言什么是覆盖…

Elasticsearch介绍、安装以及IK分词器 --学习笔记

Elasticsearch 是什么? Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎。它允许你以极快的速度存储、搜索和分析大量数据。Elasticsearch 基于 Apache Lucene 构建,提供了一个分布式、多租户能力的全文搜索引擎,带有 HTTP web 接口…

安装Ubuntu24.04服务器版本

Ubuntu系统安装 一.启动安装程序二.执行 Ubuntu Server 安装向导1.选择安装程序语言,通常选择「English」2.设置键盘布局,默认「English US」即可3.选择安装方式 三.配置网络1.按Tab键选择网络接口(例如 ens160),然后按…

Java:115-Spring Boot的底层原理(下篇)

这里续写上一章博客(115章博客) SpringBoot视图技术: 支持的视图技术 : 前端模板引擎技术的出现(jsp也是),使前端开发人员无需关注后端业务的具体实现(jsp中,具体的…

[Doris]阿里云搭建Doris,测试环境1FE 1BE

首先:阿里云的国内服务器千万不要用容器搭建,或者自己Dockfile构建镜像。两种方式都不得行,压根拉不到github的镜像,开了镜像加速器也拉不到,不要折腾了,极其愚蠢。 背景:现在测试环境&#xff…

openmv学习笔记(24电赛备赛笔记)

#openmv简介 openmv一种小型,可编程机器视觉摄像头,设计应用嵌入式应用和计算边缘,是图传模块,或者认为是一种,具有图像处理功能的单片机,提供多种接口(I2C SPI UART CAN ADC DAC &#xff0…

Linux云计算 |【第一阶段】ENGINEER-DAY4

主要内容: 配置Linux网络参数、配置静态主机名、查看/修改/激活/禁用网络连接、指定DNS、虚拟网络连接、虚拟机克隆、SSH客户端、SCP远程复制、SSH无密码验证(SERVICE-DAY5)、虚拟网络类型 一、网络参数配置 修改网卡配置文件主要是需要配置…

人工智能与社交变革:探索Facebook如何领导智能化社交平台

在过去十年中,人工智能(AI)技术迅猛发展,彻底改变了我们与数字世界互动的方式。Facebook作为全球最大的社交媒体平台之一,充分利用AI技术,不断推动社交平台的智能化,提升用户体验。本文将深入探…

资源调度的艺术:大规模爬虫管理的优化策略

摘要 本文深入探讨了在处理大规模数据抓取项目时,如何通过优化资源调度策略来提升爬虫管理的效率与稳定性。从技术选型到策略实施,揭示了优化的核心技巧,助力企业与开发者高效驾驭大数据采集的挑战。 正文 在互联网信息爆炸的时代&#xf…

TypeScript 开发或面试中常见问题合集

目录 typescript 与 babel 区别编译编译器 模块模块解析规则 命名空间interface 合并逻辑声明合并 普通项目怎么从 js 迁移到 ts解决冲突 第三方工具生成.d.ts文件三斜线指令模块解析逻辑types 发布书写 ts 的声明文件Property includes does not exist on type number[] globa…

RSA非对称加密

前言 RSA是一种非对称加密算法,也是目前最常用的加密算法之一。它由三位发明家(Rivest、Shamir、Adleman)于1977年提出,并以他们的姓氏命名。RSA算法使用了两个密钥:公钥和私钥。公钥可用于对数据进行加密&#xff0c…

《Exploring Aligned Complementary Image Pair for Blind Motion Deblurring》

这篇论文的标题《Exploring Aligned Complementary Image Pair for Blind Motion Deblurring》可以翻译为《探索对齐的互补图像对用于盲运动去模糊》。从标题可以推断,论文的焦点在于开发一种算法或技术,利用成对的图像来解决运动模糊问题,特别是在不知道模糊核(即造成模糊…

第一弹:基于ABAP OLE技术实现对服务器文件进行读写操作

前言 最近遇到这样一个需求,需要对BW服务器上的文件进行下载的同时写入每个用户相对应的数据。之前的服务器模版是一个死模版,对于这样的要求,我就想到了OLE技术,那么什么是OLE技术呢? 一、什么是OLE技术&#xff1f…

Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统

摘要 在智能建筑和工业自动化领域,Modbus和BACnet/IP协议的集成应用越来越普遍。BA(Building Automation,楼宇自动化)系统作为现代建筑的核心,需要高效地处理来自不同协议的设备数据,负责监控和管理建筑内…

深入浅出mediasoup—通信框架

libuv 是一个跨平台的异步事件驱动库,用于构建高性能和可扩展的网络应用程序。mediasoup 基于 libuv 构建了包括管道、信号和 socket 在内的一整套通信框架,具有单线程、事件驱动和异步的典型特征,是构建高性能 WebRTC 流媒体服务器的重要基础…

使用 spring MVC 简单的案例 (1)计算器

一、计算器 1.1前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> …

Git报错fatal: detected dubious ownership in repository

报错信息 fatal: detected dubious ownership in repository at 解决办法 一行代码解决 git config --global --add safe.directory "*";如何使用git工具初始胡项目并且和远程仓库建立联系 git init–建立一个本地仓库 git add README.md–将README.md文件加入…