mysql面试(一)

news2024/12/24 3:24:08

前言

从今天开始,更新一些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.coloradmin.cn/o/1942429.html

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

相关文章

LeetCode //C - 257. Binary Tree Paths

257. Binary Tree Paths Given the root of a binary tree, return all root-to-leaf paths in any order. A leaf is a node with no children. Example 1: Input: root [1,2,3,null,5] Output: [“1->2->5”,“1->3”] Example 2: Input: root [1] Output: […

服务器利用宝塔面板部署Django项目

目录 1. 使用命令启动Django项目1.1 使用 Xshell 连接服务器1.2 安装Anaconda1.3 启动Django项目1.4 使用tmux实现项目的后台运行 2. 使用Python项目管理器部署项目2.1 安装宝塔面板和软件2.2 添加站点2.3 上传项目文件2.3.1 收集静态文件2.3.2 生成依赖文件 2.4 安装安装Pytho…

如何查看Kafka的偏移量offset

本文介绍三种方法查看Kafka的偏移量offset。 1. API:ConsumerRecord的offset()方法查看offset。 2. API:KafkaConsumer的position(TopicPartition partition)方法查看offset。 3. 命令行:kafka-consumer-groups.sh命令查看offset。 前提条…

OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结(一)

文章大纲 引言一、状态管理概述二、基本术语三、状态装饰器总览 引言 前面说了ArkTS 是在TypeScript基础上结合ArkUI框架扩展定制的,状态管理中的各种装饰器就是扩展的功能之一,可以让开发者通过声明式UI快速高效实现组件之间的数据同步,至于…

从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)

偷个懒,代码来自比很久之前看的书,当时还在用gym,我做了微调以升级到gymnasium当前版本,确保可以正常演示。如果小伙伴或者原作者看到了麻烦提一下,我好备注一下出处。 您的进步和反馈是我最大的动力,小伙…

Dav_笔记10:Using SQL Plan Management之1

SQL计划基准概述 SQL计划管理是一种预防机制,可以记录和评估SQL语句的执行计划。此机制可以构建SQL计划基准,这是一组SQL语句的已接受计划。已接受的计划已被证明表现良好。 SQL计划基准的目的 SQL计划基准的目标是保持相应SQL语句的性能,…

1-如何挑选Android编译服务器

前几天,我在我的星球发了一条动态:入手洋垃圾、重操老本行。没错,利用业余时间,我又重新捣鼓捣鼓代码了。在接下来一段时间,我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…

【JAVA】堆、栈的理解

JAVA中的堆和栈 堆和栈的简单描述栈堆 示例1示例2如何判断操作的是原始对象本身还是引用地址的变量(个人理解,仅作为记录) 引言 在Java中,内存管理是一个重要的概念,它涉及到堆(Heap)和栈&#…

CTFSHOW game-gyctf web2

【2020年新春战“疫”】game-gyctf web2 参考https://www.cnblogs.com/aninock/p/15408090.html 说明:看见网上好像没多少人写,刚好玩到这道题了,就写一下吧。 一、利用入口 常规套路发现www.zip然后进行代码审计 index可以包含update&…

05 HTTP Tomcat Servlet

文章目录 HTTP1、简介2、请求数据格式3、响应数据格式 Tomcat1、简介2、基本使用3、Maven创建Web项目4、IDEA使用Tomcat Servlet1、简介2、方法介绍3、体系结构4、urlPattern配置5、XML配置 HTTP 1、简介 HTTP概念 HyperText Transfer Protocol,超文本传输协议&am…

浏览器打开抽奖系统html

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <script src"https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <style> body {…

【LabVIEW作业篇 - 5】:水仙花数、数组与for循环的连接

文章目录 水仙花数数组与for循环的连接 水仙花数 水仙花数&#xff0c;是指一个3位数&#xff0c;它的每个位上的数字的3次幂之和等于它本身。如371 3^3 7^3 1^3&#xff0c;则371是一个水仙花数。 思路&#xff1a;水仙花数是一个三位数&#xff0c;通过使用for循环&#xf…

代码随想录——打家劫舍(Leetcode198)

题目链接 背包问题 class Solution {public int rob(int[] nums) {if(nums.length 0){return 0;}if(nums.length 1){return nums[0];}int[] dp new int[nums.length];dp[0] nums[0];dp[1] Math.max(nums[0], nums[1]);for(int i 2; i < nums.length; i){dp[i] Mat…

人工智能算法工程师(高级)课程5-图像生成项目之对抗生成模型与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(高级)课程5-图像生成项目之对抗生成模型与代码详解。本文将介绍对抗生成模型&#xff08;GAN&#xff09;及其变体CGAN、DCGAN的数学原理&#xff0c;并通过PyTorch框架搭建完整可运行的代码&am…

Android 15 之如何快速适配 16K Page Size

在此之前&#xff0c;我们通过 《Android 15 上 16K Page Size 为什么是最坑》 介绍了&#xff1a; 什么是16K Page Size为什么它对于 Android 很坑如何测试 如果你还没了解&#xff0c;建议先去了解下前文&#xff0c;然后本篇主要是提供适配的思路&#xff0c;因为这类适配…

算法——滑动窗口(day7)

904.水果成篮 904. 水果成篮 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 根据题意我们可以看出给了我们两个篮子说明我们在开始采摘到结束的过程中只能有两种水果的种类&#xff0c;又要求让我们返回收集水果的最大数目&#xff0c;这不难让我们联想到题目…

Java 面试相关问题(中)——并发编程相关问题

这里只会写Java相关的问题&#xff0c;包括Java基础问题、JVM问题、线程问题等。全文所使用图片&#xff0c;部分是自己画的&#xff0c;部分是自己百度的。如果发现雷同图片&#xff0c;联系作者&#xff0c;侵权立删。 1 基础问题1.1 什么是并发&#xff0c;什么是并行&#…

Python爬虫知识体系-----Urllib库的使用

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 1. 基本使用2. 请求对象的定制3. 编解码1. get请求方式&#xff1a;urllib.parse.quote&#xff08;&#xff09;2. ur…

数驭未来,景联文科技构建高质大模型数据库

国内应用层面的需求推动AI产业的加速发展。根据IDC数据预测&#xff0c;预计2026年中国人工智能软件及应用市场规模会达到211亿美元。 数据、算法、算力是AI发展的驱动力&#xff0c;其中数据是AI发展的基石&#xff0c;中国的数据规模增长速度预期将领跑全球。 2024年《政府工…

【WAF剖析】10种XSS某狗waf绕过姿势,以及思路分析

原文&#xff1a;【WAF 剖析】10 种 XSS 绕过姿势&#xff0c;以及思路分析 xss基础教程参考&#xff1a;https://mp.weixin.qq.com/s/RJcOZuscU07BEPgK89LSrQ sql注入waf绕过文章参考&#xff1a; https://mp.weixin.qq.com/s/Dhtc-8I2lBp95cqSwr0YQw 复现 网站安全狗最新…