Mysql的索引与事务理解

目录

一、Mysql索引

1、索引的概念

2、索引的特点

3、索引使用场景

4、Mysql有关索引的操作

(1)查询表具有的索引

(2)增加索引

(3)删除索引

5、索引实现原理

(1)B树

(2)B+树

(3)数据库选择B+树的原因

二、Mysql事务

1、事务的概念

2、事务的特点

3、事务的隔离等级

4、数据库操作事务

一、Mysql索引

1、索引的概念

索引是通过额外的数据结构,针对表里的数据进行重新组织,加快查询速度。

2、索引的特点

(1)加快查询的速度;

(2)索引自身也是一种数据结构,会占据存储空间;

(3)当对表进行增、删、改时,对应的索引也要进行修改。

3、索引使用场景

索引适用于表查询的频率高,但是增删改的频率低。

4、Mysql有关索引的操作

先创建一个学生表:

(1)查询表具有的索引

命令:show index from 表名

Mysql中的primary key、unique、foreign key都会默认自动生成索引。

一个表可以有多个索引,索引都是根据具体的列展开的。类似于新华字典中的拼音查询和部首查询

(2)增加索引

命令:create index 索引名称 on 表名(对应索引列)

需注意:如果表中数据较多时,创建索引要慎重,创建时会扫描整个表的数据,涉及大量的读取和写入操作,导致大量的硬盘IO,数据库极容易挂。

ps:如果表中已有数据,但想加入索引的话,可以重新建立一个相同的表,对应列加上索引,然后将表中数据复制到新表中。

(3)删除索引

命令:drop index 索引名称 on 表名

5、索引实现原理

索引是如何做到对应列名快速找到相应数据的???

数据库索引采用的数据结构是B+树,它的前身是B树。

(1)B树

①概念

B树是一个n叉搜索树,与二叉搜索树的区别在于:二叉搜索树一个节点只有一个值,划分出了2个区间;而n叉搜索树,一个节点包含n个值,划分出了n+1个区间。若两棵树高度相同,n叉搜索树的元素更多。

例如:

②特点

数据的索引值和具体data都在每个节点上;任何一个关键字只会出现在一个节点中;每遍历一个节点,就需要进行一次硬盘IO;搜索可能会在非叶子节点结束,搜索次数具有不确定性。

(2)B+树

①概念

B+树是在B树上做了改进,B树上一个节点有n个值,会划分出n+1个区间;对于B+树,一个节点有n个值,会划分出n个区间。

②特点

每个节点的n个值中,存在一个最大值来自父节点;每个节点的值,都会在子树中重复出现;所有值最终都会出现在叶子节点,叶子节点之间使用链式结构相连;查询时间是稳定的,都需要从根结点查询到叶子结点,非叶子节点存储索引值即可,叶子节点存储索引值+数据。减少了硬盘IO次数,对于非叶子节点数据可以存储到内存中,在内存中比较即可。

(3)数据库选择B+树的原因

B+树的查询时间是稳定的,都需要从根结点到叶子结点,经过的硬盘IO次数是一样的;而B树查询时间不稳定,经过的硬盘IO次数也不一定,具有不确定性。

二、Mysql事务

1、事务的概念

对表执行的一批操作(多个操作),在同一个事务当中,这些操作要么全部成功,要么全部失败,不存在部分成功的情况。

2、事务的特点

(1)原子性

通过事务,把多个操作打包到一起,这些操作要么全部成功要么全部失败。

(2)一致性

一个事务必须使数据库从一个一致性状态(数据处于一种有意义的状态)转换到另一个一致性状态。

(3)隔离性

多个事务并发执行时,事务与事务之间应该要不受干扰。

(4)持久性

一个事务一旦提交,对数据库中数据的改变是永久性的,数据会持久化到硬盘。

3、事务的隔离等级

(1)读未提交---读写都未加锁

问题:事务1修改了某个数据,但是没有提交事务1;此时事务2读取到了同一个数据,此时事务2读到的数据是脏数据,还未修改成功(脏读+不可重复读+幻读)。

(2)读已提交---写操作加锁(写的时候不能读)

问题:事务1修改了某个数据,且提交了改事务;此时事务2读取到了正确事务;事务3也修改了某个数据,此时事务2再次读取时发现两次读到的数据内容不一样(不可重复读+幻读)。

(3)可重复读---读和写都加锁(数据库默认隔离等级)

问题:事务1修改了某个数据,且提交了改事务;此时事务2读取到了正确事务;事务3也插入了某个数据,此时事务2再次读取时发现两次读到的数据记录数不一样(幻读)。

(4)串行化

问题:数据最靠谱,但并行程度最低,效率最低。

4、数据库操作事务

(1)开启事务

命令: start transaction

(2)提交事务

命令:commit

(3)回滚事务

命令:rollback

提交后,数据库有插入的新数据。

回滚后,数据库没有插入的新数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【java数据结构之八大排序(上)-直接插入排序,希尔排序,选择排序,堆排序,向下调整(大根堆,小根堆)等知识详解】

🌈个人主页:努力学编程’ ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 …

深度学习之基于YOLOv5的山羊行为识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5的山羊行为识别系统是一个结合了深度学习和目标检测技术的项目,旨在通过图像或视频实现对山羊…

DELL PowerEdge服务器通过iDRAC升级BIOS遇到的问题

本文对PowerEdge 12G系统,也就是iDRAC 7版本升级BIOS中遇到的几个问题做个总结,对于其他版本理论上应该也是适用的。如果还遇到其他问题,可以添加VX,VX号为 StorageExpert 进行进一步的分析探讨。 第一个问题,成功下载…

C#调用skiasharp实现绘制并拖拽图形

SkiaSharp是基于.net的跨平台二维图形库,封装的谷歌的Skia库,SkiaSharp支持在以下平台或运行时中使用,能够在图片中绘图,也提供控件在Winform、WPF等使用。本文学习skiasharp在Winform的基本用法,并参照参考文献5实现绘…

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

Root Motion动画与普通动画的区别 普通动画:动画文件里记录的是物体的绝对坐标和方向,在播放动画时,Unity会根据Animation中记录的值,直接修改游戏对象的坐标和方向,每一帧的坐标和方向都是通过插值计算得出来的&…

【Camera KMD ISP SubSystem笔记】Request 流转与Bubble机制

ISP中断类型 SOF: 一帧图像数据开始传输 EOF: 一帧图像数据传输完成 REG_UPDATE: ISP寄存器更新完成(每个reg group都有独立的这个中断) EPOCH: ISP某一行结尾(默认20)就会产生此中断 BUFFER DONE: 一帧图像数据ISP完全写到DDR了 管理Isp request的几个List st…

锂电池SOH预测 | 基于CNN的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

AMBA-CHI协议详解(二)

《AMBA 5 CHI Architecture Specification》 文章目录 2.1 Channels综述2.2 Channel域段2.2.1 request fields2.2.2 Response fields2.2.3 Snoop request fields2.2.4 Data fields 2.3 事务结构2.3.1 Read transactions2.3.1.1 Allocating Read2.3.1.2 Non-allocating Read 2.…

字符串类型漏洞之updatexml函数盲注

UPDATEXML 是 MySQL 数据库中的一个函数,它用于对 XML 文档数据进行修改和查询。然而,当它被不当地使用或与恶意输入结合时,它可能成为 SQL 注入攻击的一部分,从而暴露敏感信息或导致其他安全漏洞。 在 SQL 注入攻击中&#xff0…

通过Cmake官网下载.gz文件安装最新版本的CMAKE、适用于debian

1.前往官网下载最新版本debian https://cmake.org/download/ 2.选他 3. 通过XFTP传输到服务器 4. 解压文件 #cd 进入对应目录,然后执行下面命令解压 $ tar -zxvf cmake-3.29.2.tar.gz5.执行这个文件 $ ./bootstrap6.完成之后再执行这个 $ make7.然后&#xff…

C语言--贪吃蛇小游戏

目录 一、Win32API介绍 1.1Win32API 1.2控制台程序 1.3控制台屏幕上的坐标COORD 1.4GetStdHandle 1.5GetConsoleCursorInfo 1.6 CONSOLE_CURSOR_INFO 1.7 SetConsoleCursorInfo 1.8SetConsoleCursorPosition 1.9GetAsyncKeyState 二、贪吃蛇游戏设计与分析 2.1地图 …

双重注意力模块 DoubleAttention | A2-Nets: Double Attention Networks

论文名称:《 A 2 A^2 A2-Nets: Double Attention Networks》 论文地址:https://arxiv.org/pdf/1810.11579.pdf 学习捕捉远距离关系对于图像/视频识别是基础性的。现有的CNN模型通常依靠增加深度来建模这些关系,这在很大程度上效率低下。在这…

数字旅游打造个性化旅行体验,科技让旅行更精彩:借助数字技术,旅行者可以定制专属旅行计划,享受个性化的旅行体验

目录 一、引言 二、数字旅游的兴起与发展 三、数字技术助力个性化旅行体验 1、智能推荐系统:精准匹配旅行者需求 2、定制化旅行计划:满足个性化需求 3、实时互动与分享:增强旅行体验 四、科技提升旅行便捷性与安全性 1、移动支付与电…

boot https ssl 使用http协议访问报错

在springboot中配置ssl以后, 再次使用http访问对应的接口就会报错 可以考虑如下设置,将http访问的端口重定向到https对应的端口 import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util…

图像处理ASIC设计方法 笔记18 轮廓跟踪算法的硬件加速方案

目录 1排除伪孤立点(断裂链表)方法1 限制链表的长度方法2 增加判断条件排除断裂链表方法3 排除不必要跟踪的轮廓(推荐用这个方法) P129 轮廓跟踪算法的硬件加速方案 1排除伪孤立点(断裂链表) 如果图像中某…

探索开源的容器引擎--------------Docker容器操作

目录 一、Docker 容器操作 1.1容器创建 1.2查看容器的运行状态 1.3启动容器 1.4创建并启动容器 1.4.1当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是: 1.4.2在后台持续运行 docker run 创建的容器 1.4.3创建容器并持续运行容器…

Pytorch基础:torch.load_state_dict()方法在加载时不会检查类型

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 笔者在使用torch.nn.module的load_state_dict中出现了一个问题,一个被注册的张量在加载后居然没有变化,一开始以为是加载出现了问题&#…

Kafka 3.x.x 入门到精通(07)——Java应用场景——SpringBoot集成

Kafka 3.x.x 入门到精通(07)——Java应用场景——SpringBoot集成 4. Java应用场景——SpringBoot集成4.1 创建SpringBoot项目4.1.1 创建SpringBoot项目4.1.2 修改pom.xml文件4.1.3 在resources中增加application.yml文件 4.2 编写功能代码4.2.1 创建配置…

debian配置BIND DNS服务器

前言 局域网内有很多台主机,IP难以记忆。 而修改hosts文件又难以做到配置共享和统一,需要一台内网的DNS服务器。 效果展示 这里添加了一个域名hello.dog,将其指向为192.168.1.100。 同时,外网的域名不会受到影响,…

基于粒子滤波器的电池剩余使用寿命计算matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 粒子滤波器基础 4.2 电池剩余使用寿命建模与预测 4.3 粒子滤波器在电池寿命预测中的应用 5.完整工程文件 1.课题概述 基于粒子滤波器的电池剩余使用寿命计算。根据已知的数据,预测未来…
最新文章