Mysql语法四:索引查找和了解何为事务

news2025/2/26 6:04:57

目录

1.索引

1.1:使用

1.1.1:查看索引

 1.2.2:创建索引

1.1.3:删除索引

1.2:索引查询的原理

1.2.1:何为 B+树

2.事务

2.1:特性

2.1.1:原子性

2.1.2:一致性

2.1.3:持久性

2.1.4:隔离性

2.2:事务之间相互影响的种类

2.2.1:脏读

2.2.2:不可重复读

2.2.3:幻读


前言:我们前一篇讲了怎样多表之间联合查询,这样的查找效率不高,所以我们这篇将要将一个快的查找,索引---相当于我们书的目录

1.索引

1.1:使用

在创建主键约束(Primary key),唯一约束(Unique),外键约束(Foreign key)时,会自动创建对应列的索引。

1.1.1:查看索引

show index from 表名;

1a89877f8a454dbb8f5cafc0342b04f6.png

 1.2.2:创建索引

create index 索引名(你取得别名) on 表名(列名--你想变成索引的列);

e39c06def95145639316a6b7ad76ad64.png

最好是在表创建之初就把索引给搞好。

如果在已经有很多条数据的表来创建索引,会吃掉大量的磁盘,系统,在这段时间类,数据库是无法正常的进行工作的。

1.1.3:删除索引

drop index 索引名 on 表名;

88d97239a4ae4c15814224b01cfea7cc.png


1.2:索引查询的原理

索引保存的数据结构主要为B+树。

1.2.1:何为 B+树

2645bb04115b4cbdbbc999b35f53a551.png

1.B+树又叫N叉搜素树,每一个节点上包含N个key值,N个key划分N个区间,最后一个Key就是最大值。

2.父节点的元素会重复出现在子节点上,这样是叶子节点包含了所有数据。

3.叶子节点,用类似链表的方式,首尾相连。

带有主键的表,就是按照主键索引的B+树来组织的。

优点:

1.高度降低下来,比较的时候,硬盘IO次数就比较少。

2.适合范围查询

3.所有的查询,都是落在叶子节点上的,无论查询哪个元素,中间比较的次数差不多,查询操作比较均衡。

假如:索引是主键列id号。

baecd4c72e484171848b62772484a254.png

 叶子节点:存放了索引信息和data域。

非叶子节点:只存放了索引信息。

如果索引不是主键列

会构造另外一棵B+树,非叶子节点存放的是索引,而叶子节点存放的不是完整的数据行,而是主键。

使用主键列来查询,只要查一次B+ 树就可以了

而使用非主键列的索引来查询,则需要先查询一遍索引的B+树,再查一遍主键列的索引的B+树。(这个叫回表)。


2.事务

数据库事务是访问并可能操作各种数据项的一个数据库操作的序列。事务处理可以用来维护数据库的完整性,保证成批的Mysql语句(insert update delete)那么全部成功,那么全部失败。

2.1:特性

2.1.1:原子性

原子性就是把一个事务中的所有操作打包成一个整体,那么全部成功,那么全部失败。如果中间有一个操作失败,就会自动恢复到执行之前的样子,就像这个事务从来没有执行过。也叫做回滚(把执行过的操作逆向恢复回去)。

例如:

张三给李四转100块钱,首先会在张三的账户上扣除一百块钱,等李四收取,之后在李四的账户上增加一百块钱。

这一天,转钱的时候,张三断网了。这就说明这个事务已经失败了,就要进行回滚,从张三的账户上扣除一百块钱进行逆向操作,使张三的账户金额不变。就像没有发生转钱这件事。


2.1.2:一致性

事务执行前和事务执行后都是将数据合法的状态,符合预测规则。

如上个例子:

一致性就是,张三账户扣除的钱和李四账户增加的钱要一样多。


2.1.3:持久性

事务一旦提交,对数据库的改变都是永久的,事务产生的修改都会存入到硬盘中。

2.1.4:隔离性

数据库使允许多个事务同时进行操作,隔离性就是防止多个事务并发执行由于交叉而导致数据错误。

隔离性越高,就意味着事务之间的并发程度越低,执行效率越慢,但是数据的准确率越高。

2.2:事务之间相互影响的种类

2.2.1:脏读

就是两个事务并发执行(如 读,写)读这个事务读入了错误的数据就是脏读。

例如:

写这个事务:张三给老师上传作业。

读这个事务:老师就立马批改这个作业。

写修改这个事务:张三过了一会儿,感觉自己有道题写错了,再一次上传了自己修改过的作业。

脏读:但老师已经把张三第一次上传的作业批改完了。

这是因为读和写这个两个事务是完全并发的。


2.2.2:不可重复读

为了解决脏读问题,我给写加锁(我在写的时候,你不能看,等我写完了,你才可以看)

不可重复度:在一个事务中。连续两次读到的数据结果不一样。

例如:

老师下一次布置作业的时候,规定提交的时间(时间之后可以修改作业)。

写:张三在提交结束前上传了作业。

读:老师正在批改张三的作业。

写:这时候,有道题,张三突然有解题思路,又把作业进行修改,再次提交了作业。

读:老师批改张三作业和之前的不一样了。看不到修改前的那道题是怎样写的。


2.2.3:幻读

为了解决不可重复读,给读加锁,(我在读的时候,你不可以修改)

幻读:在同一个事务中,两次读到的结果集不一样。

例如:

老师下一次布置作业,规定在提交作业时间之后不可以再次修改作业。

写:张三提交了作业。

读:老师进行批改作业,看现在提交作业人数有27人。

写:李四问张三有啥作业,却被告之,少写了一道题。又将作业进行撤回。

读:老师批改到一半,看现在提交作业人数只有26人。

在同一个事务中,两次读的结果集不一样。


总结

以上就是我总结的Mysql的索引和事务,若上面若错误的,请各位铁子留言纠错,若感觉不错,请一键三联。

 

 

 

 

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

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

相关文章

(附源码)计算机毕业设计Java坝上长尾鸡养殖管理系统

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

博易大师期货程序化交易软件,期货买卖点提示量化分析系统幅图指标公式,期货波段进场点信号

期货指标公式不是交易的圣杯,也不是期货亏损后的救命稻草。请理性运用指标公式,独立决策,盈亏自负。期货市场具有不确定性和不可预测性的,请正常对待和使用指标公式! 期货指标公式是通过数学逻辑角度计算而来,仅是期货…

【Kotlin 协程】协程底层实现 ④ ( 结构化并发 | viewModelScope 作用域示例 )

文章目录一、viewModelScope 作用域作用二、viewModelScope 作用域示例常见的 CoroutineScope 协程作用域 : GlobalScope : 该作用域是 进程级别的 , 与应用进程同级 , 即使 Activity 被销毁 , 协程任务也可以继续执行 ;MainScope : 该 作用域仅在 Activty 中 , 如果 Activity…

VuePress构建一个文档管理网站

序言 目前无论笔记还是项目文档,大部分我都会通过 Markdown来记录,并且大部分文档写完都只存在自己电脑上,每次查找起来都需要耗费一些时间 自己的写的一部分技术教程由于初次记录时了解知识不多,内容存在偏差或考虑不全面&…

数仓搭建-ODS层

数仓搭建-ODS层 1)保持数据原貌不做任何修改,起到备份数据的作用。 2)数据采用LZO压缩,减少磁盘存储空间。100G数据可以压缩到10G以内。 3)创建分区表,防止后续的全表扫描,在企业开发中大量使用…

ILRuntime使用指南

前言 最近闲着没事做,于是用ILRuntime做了一个小游戏中间遇到一些坑,对于ILRuntime的认识更清楚了。其它技巧自动转换DLL 设置引用文件夹 我们在热更项目里面写代码的时候需要用到Unity的DLL,可是这些DLL引用起来查找就很麻烦。这时候可以…

带你了解LINUX反弹Shell的各种姿势(超详细)

简介 LInux反弹Shell(Reveser Shell), 也可以称为反向Shell, 由被控制端主动向控制端发送请求建立通讯, 随后将执行命令的结果输出到控制端, 本质上是网络概念的客户端与服务端的角色反转 本篇文章介绍LINUX反弹Shell的多种姿势, 在真实的渗透环境中, 根据客户端存在哪些命令…

深度学习求解微分方程系列四:一种基于自适应激活函数的PINN求解方法—burger方程逆问题

下面我将介绍内嵌物理知识神经网络(PINN)求解微分方程。首先介绍PINN基本方法,并基于自适应激活函数的PINN求解框架利用Pytorch实现求解含时间项的一维burger方程逆问题。 内嵌物理知识神经网络(PINN)入门及相关论文 深…

视频怎么消除人声?一款视频去人声软件,轻松去除视频人声

视频消除人声是一个优质的视频文件必须经历的步骤。当前,分享视频的用户越来越多,只有原创且有亮点的视频才能更吸引人。但是很多时候自己录制的原创视频总是有各种声音,所以很难制作出一个好的视频,获得更多的关注。 那视频怎么消…

制霸GitHub热榜的Spring Cloud Alibaba源码笔记,果然是阿里传出的

7年前面试最常问的并且可以顺利拿到高薪的技能是 Dubbo 3年前面试,只要你简历上有Spring Cloud 项目的相关经验,肯定会打动面试官,现在呢?恐怕简历上有Dubbo和简单的Spring Cloud技术和经验是无法让面试官高看你的。 Spring Cloud Alibaba 近几年在受到国内不少开…

我们都有光明的前途·OI 生涯回忆录

挺震撼的,不知不觉,我就从一个什么也不懂的萌新,成长为一个能够独立思考的普通 OIer,直到不得不面对眼前的退役生活了。 近四年半的时间,我在洛谷、CodeForces、Atcode、Uoj、Loj 等各大网站都有做题记录,重…

ST-link/V2引脚定义和更新固件说明

LED状态说明 闪烁红色:ST-LINK/V2连接到计算机后,第一次USB枚举过程 红色:ST-LINK/V2与计算机已建立连接 闪烁绿色/红色:目标板和计算机在进行数据交换 绿色:通讯完成 橙色(红色绿色)&#xff1…

iwebsec靶场 SQL注入漏洞通关笔记5- updatexml注入(报错型盲注)

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注&#…

Verilog 时序检查

setup hold recovery removal width period 指定路径延迟,目的是让仿真的时序更加接近实际数字电路的时序。利用时序约束对数字设计进行时序仿真,检查设计是否存在违反(violation)时序约束的地方,…

鲲鹏devkit开发套件——编译调试工具介绍

鲲鹏devkit编译调试工具介绍 编译调试插件是其中的一个子工具。编译调试插件即插即用,支持一键安装服务器鲲鹏编译器,支持单机下Nvidia GPU应用调试能力,通过统一调试界面调试GPU应用,实现cuda-gdb调试能力,以及鲲鹏平…

Spring Security 使用JSON格式参数登录的两种方式

前言 在 Spring Security 中,默认的登陆方式是以表单形式进行提交参数的。可以参考前面的几篇文章,但是在前后端分离的项目,前后端都是以 JSON 形式交互的。一般不会使用表单形式提交参数。所以,在 Spring Security 中如果要使用…

python3-turtle(1)

turtle 是海龟绘图模块,海龟绘图很适合用来引导孩子学习编程,最初构想来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言,它是基于tkinter 模块打造,提供简单的绘图方法。 turtle模块假…

集合框架----源码解读ArrayList篇

1.ArrayList<E> ArrayList是继承AbstractList<E> List 接口的可调整数组实现。实现所有可选的列表操作&#xff0c;并允许所有元素&#xff0c;包括null。除了实现List接口之外&#xff0c;该类还提供了一些方法来操作内部用于存储列表的数组的大小。(这个类大致相…

准备蓝桥杯的宝贝们看过来,二分法一网打尽(基础篇)

今天给大家介绍一下简单的二分法&#xff08;刷题第一步&#xff01;&#xff09; 二分基础题链接 二分查找有个很明显的特点就是有序&#xff0c;这个特点同学如果在题中看到就要格外注意 一定要看完&#xff0c;基本的三种解法&#xff0c;后面还有真题链接哦&#xff01;…

异步请求-AJAX

什么是同步交互 首先用户向HTTP服务器提交一个处理请求。接着服务器端接收到请求后&#xff0c;按照预先编写好的程序中的业务逻辑进行处理&#xff0c;比如和数据库服务器进行数据信息交换。最后&#xff0c;服务器对请求进行响应&#xff0c;将结果返回给客户端&#xff0c;返…