当前位置: 首页 > news >正文

【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务

作者:困了电视剧

专栏:《MySQL数据库》

文章分布:这是一篇关于Java中异常类的文章,在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程,如有疏漏,欢迎大佬指正!

目录

索引

用法

底层逻辑

事务

并发执行事务可能产生的问题

脏读问题

不可重复读

幻读 


索引

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索
引, 并指定索引的类型,各类索引有各自的数据结构实现。
1.数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关     系。
2.索引所起的作用类似书籍目录,可用于快速定位、检索数据。
3.索引对于提高数据库的性能有很大的帮助。 

用法

create index 索引名 on 表名(字段名);
当我们将数据放入一个表中时(这里先假定这个表的名字是student,表中存储的是student的
个人信息),如果只是一个客户端并且此时数据库中的数据很少,那MySQL的服务器还可以在极短的时间里完成处理,但如果数据库中存储的数据很多呢?那当我们想进行查询的时候就需要一条一条数据的进行比较,如果此时又不止一个客户端访问数据库而是很多的客户端同时访问数据库呢?那需要的时间又需要增加许多。
这就造成了很多麻烦,为了解决这一问题,MySQL采用的方法之一就是建立一个索引。当你建立了一个索引时在进行查找就会大大降低所消耗的时间,但是这同时也存在一个弊端,当你需要对数据库中的数据进行更改的时候,那你的目录(索引)就也要进行相应的更新,这就增加了操作所需要的时间。
现在可能有人要问了,这索引这么玄乎,那他底层的原理是什么?

底层逻辑

当创建一个MySQL的索引,就是构建一个B+树,这个树中的元素就是数据库中存储的内容。

我们在了解B+树之前先了解什么是B树,B树又称B-树,是一个n叉搜素树,如图所示

此时我们发现如果数据库中的数据按这种方式进行排列的话,数据参差不齐很难找到我们需要的数据,此时就需要我们的B+树来进行安排了。

除了叶子节点,其他节点保留的仅仅是一个键值也就是用primary定义的key,然后最后一排的叶子节点中存储的才是每一个完整的数据,就比如如果是学生,那叶子节点以外的存储的是id编号,而叶子结点存储的则是每一个学生的姓名,班级等等。

B+数会使所有的数据都出现在叶子节点上,并且叶子节点都在同一个高度,这就使查找的时候效率大大增高。 

事务

在生活中我们会遇到这样的问题,当我们再给别人转账的时候,如果我们转出500,在对方账户上进行转入500时发生了错误,那怎么办?我们的500块钱就会这样打水漂了嘛?

不会,为了解决这一问题,MySQL引入了事务这一概念。

事务的本质是将多个sql语句给打包成一个整体,要么全部执行成功,要么就一个都不执行,而不会出现执行一半这种中间状态。这体现了事务最核心的特性——原子性。

注:这里的一个都不执行是,并不是完全不执行,而是如果在执行一半时突然出错了,就停止执行,并将已经执行的部分给进行还原,所以看起来就好像没有执行过一样,这种方式叫做“回滚”。

事务的特性:

1.原子性——最核心的特性。

2.一致性,数据执行前后数据一定要是靠谱的,就比如转500,一个用户少了500,另一个用     户却多了5000,这就是不靠谱的数据。

3.持久性,事务修改的内容是写到硬盘上的,持久存在的,重启也不丢失。

4.隔离性,这个“隔离性”是为了解决“并发”执行事务,引起的问题。

并发执行事务可能产生的问题

脏读问题

在事务A对数据库中的数据进行修改的时候,如果此时事务B进来读了数据,那此时这个事务B读的数据就是脏数据,因为这个数据不是准确的,不确定事务A会不会在进行修改。

为了解决这一个问题,MySQL引入了“写操作加锁”这样的机制,即当事务A在对数据进行修改的时候,事务B不能进行读操作。

不可重复读

当事务A修改好后,此时事务B进行读操作,但当事务B进行读的过程中,事务A又来进行修改了,那事务B读的数据又不准确了。

于是MySQL引入了“读操作加锁”这个机制,是数据的准确性大大增加,提高了事务的隔离性,但同时事务的并发处理能力也下降了。

幻读 

在引入读写加锁后,还可能会出现这样的问题,就是虽然我这一个文件在我读的时候不会发生改变了,但是我可能还有其他很多文件,这些个文件并没有上锁,所以当我一次性读完时,我发现我刚才读的那个没有改变但其他的却发生了变化,这在一些情况下是不允许的。

所以此时,MySQL使用“串行化”这样的方式来解决幻读,彻底放弃并发处理事务。

以上就是本篇博客的全部内容了,如有疏漏欢迎补充指正。

相关文章:

【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务

作者:困了电视剧 专栏:《MySQL数据库》 文章分布:这是一篇关于Java中异常类的文章,在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程,如有疏漏,欢迎大佬指正! 目录 索引 用法 底层逻辑…...

C++ 线程库

文章目录thread 创建mutexmutexrecursive_mutextimed_mutexlock_guard原子操作atomic条件变量condition_variable其他线程安全问题shared_ptr单例模式C 线程库是 C11 标准中引入的一个特性,它使得 C 在语言级别上支持多线程编程,不需要依赖第三方库或操作…...

python字典和集合——笔记

一、介绍 1、泛映射类型 collections.abc模块中有Mapping和MutableMapping这两个抽象基类,它们的作用是为dict和其他类似的类型定义形式接口(在Python 2.6到Python 3.2的版本中,这些类还不属于collections.abc模块,而是隶属于coll…...

TEX:显示文本

文章目录字体选择字体fontspec宏包根据字体形状控制字体为不同的字体形状选择不同的特征为不同的字体大小状选择不同的特征中文字体选择xeCJK宏包字体选择与设置XELATEX字体名查找字体集与符号居中与缩进居中单边调整两边缩进诗歌缩进列表itemize样例enumerate样例description样…...

SS-ELM-AE与S2-BLS相关论文阅读记录

Broad learning system for semi-supervised learning 摘要:本文认为,原始BLS采用的稀疏自编码器来生成特征节点是一种无监督学习方法,这意味着忽略了标注数据的一些信息,并且难以保证同类样本之间的相似性和相邻性,同…...

ESP32设备驱动-MAX6675冷端补偿K热电偶数字转换器

MAX6675冷端补偿K热电偶数字转换器 1、MAX6675介绍 MAX6675执行冷端补偿并将来自K型热电偶的信号数字化。 数据以 12 位分辨率、SPI™ 兼容的只读格式输出。 该转换器可将温度解析为 0.25C,读数高达 +1024C,并且在 0C 至 +700C 的温度范围内具有 8 LSB 的热电偶精度。 MAX…...

Python基础知识汇总(字符串四)

目录 字母的大小写转换 lower()方法 upper()方法 删除字符串中的空格和特殊字符 strip()方法...

C语言学习笔记——指针(初阶)

前言 指针可以说是C语言基础语法中最难的理解的知识之一,很多新手(包括我)刚接触指针时都觉得很难。在我之前发布的笔记中都穿插运用了指针,但是我一直没有专门出一期指针的笔记,这是因为我确实还有些细节至今还不太清…...

阿赵的MaxScript学习笔记分享十二《获取和导出各种数据》

大家好,我是阿赵,周日的早上继续分享MaxScript学习笔记,这是第十二篇,获取和导出各种数据 1、导出数据的目的 使用3DsMax建立3D模型后,很多时候需要输出模型到别的引擎去使用,常用的格式有Obj、FBX、SLT等…...

react-draggable实现拖拽详解

react-draggable属性常用属性属性列表事件列表举例首先安装 react-draggable实现移动希望小编写的能够帮助到你😘属性 常用属性 属性默认值介绍axisxhandle拖动的方向,可选值 x ,y,bothhandle无指定拖动handle的classposition无handle的位置&#xff0…...

01.进程和线程的区别

进程和线程的区别进程和线程是计算机中的两个核心概念,它们都是用来实现并发执行的方式,但是它们在实现并发的方式和资源管理方面有一些重要的区别。进程是一个程序的运行实例。每个进程都有自己的内存空间、代码、数据和系统资源(如文件描述…...

逻辑优化-rewrite

简介 逻辑综合中的rewrite算法是一种常见的优化算法,其主要作用是通过对逻辑电路的布尔函数进行等效变换,从而达到优化电路面积、时序和功耗等目的。本文将对rewrite算法进行详细介绍,并附带Verilog代码示例。 一、算法原理 rewrite算法的…...

文件传输与聊天系统设计

技术:Java等摘要:本文介绍了一种基于TCP/IP协议使用Socket技术实现的聊天室系统,包括私聊功能和文件传输功能,对系统的主要模块进行了分析,并对系统实现过程中遇到的关键性技术进行了阐述,最后对系统进行了…...

蓝桥杯第十四届校内赛(第三期) C/C++ B组

一、填空题 (一)最小的十六进制 问题描述   请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。   请将这个数的十进制形式作…...

有关平方或高次方的公式整理一元高次方程的求解

Part.I Introduction 这篇博文记录一下数学中常用的有关平方或高次方的一些公式。 Chap.I 一些结论 下面一部分汇总了一些重要的结论 完全平方公式:(ab)2a22abb2(ab)^2a^22abb^2(ab)2a22abb2平方差公式:a2−b2(ab)(a−b)a^2-b^2(ab)(a-b)a2−b2(ab)(…...

Java笔记3

ArrayListArrayList<String> list new Arraylist<>();<>是泛型表示存放的数据类型&#xff0c;注意不能是基本数据类型&#xff1b;增删改查增&#xff1a;add 返回值为true删&#xff1a;remove 1.直接删元素2.根据索引删元素改&#xff1a;set&#xff08…...

Leetcode.2202 K 次操作后最大化顶端元素

题目链接 Leetcode.2202 K 次操作后最大化顶端元素 Rating &#xff1a; 1717 题目描述 给你一个下标从 0开始的整数数组 nums&#xff0c;它表示一个 栈 &#xff0c;其中 nums[0]是栈顶的元素。 每一次操作中&#xff0c;你可以执行以下操作 之一 &#xff1a; 如果栈非空…...

JAVA知识点全面总结3:String类的学习

三.String类学习 1.String&#xff0c;StringBuffer&#xff0c;StringBuilder的区别&#xff1f; 2.字符串拼接用加号的原理 &#xff1f; 3.字符串常量池如何理解&#xff1f; 4.String的intern方法理解&#xff1f; 5.String的equals方法和compareTo方法的使用&#xf…...

Eureka注册中心和Nacos注册中心详解以及Nacos与Eureka有什么区别?

目录&#xff1a;前言Eureka注册中心Nacos注册中心Nacos与Eureka有什么区别&#xff1f;前言提供接口给其它微服务调用的微服务叫做服务提供者&#xff0c;而调用其它微服务提供的接口的微服务则是服务消费者。如果服务A调用了服务B&#xff0c;而服务B又调用了服务C&#xff0…...

Web3D发展趋势以及Web3D应用场景

1&#xff0c;Web3D发展趋势随着互联网的快速发展&#xff0c;Web3D技术也日渐成熟&#xff0c;未来发展趋势也值得关注。以下是Web3D未来发展趋势的七个方面&#xff1a;可视化和可交互性的增强&#xff1a;Web3D可以为三维数据提供可视化和可交互性的增强&#xff0c;将极大地…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...