索引和事务
文章目录
- 一、索引
- 1.1 概念
- 1.2 作用
- 1.3 使用场景
- 1.4 使用
- 二、事务
- 2.1 为什么要使用事务
- 2.2 事务的概念
- 2.3 事务的使用
- 三、内容重点总结
一、索引
1.1 概念
索引是一种特殊的文件,包含对数据表所有记录的引用指针。在MySQL中,索引是基于一个或多个列的数据结构,是一种数据库对象,它们存储有序的键值对,其中键是列的值,而值是指向表中数据行的物理位置。可以对表中的一列或多列创建索引,并指定索引类型,各类索引有各自的数据结构实现。
1.2 作用
- 数据库中的表、数据、索引之间的关系类似于书架上的图书、书籍内容、书籍目录的关系。
- 索引可用于快速定位,检索数据,加快查询的速度,避免对表进行遍历,是对查询操作的优化手段

索引能提高查询的速度,但也会有一定的代价- 占用更多的空间,生成索引,需要一系列的数据结构和额外的数据,来存储到硬盘空间中
- 可能会降低插入、更新和删除操作的速度
1.3 使用场景
考虑对数据库中表的某列或某几列创建索引,需要考虑以下几点:
- 数据量较大,经常对列进行条件查询
- 该表的插入和对这些列的修改操作频率较低
- 索引会占用额外的磁盘空间
满足上述条件,考虑对表中这些字段创建索引,来提高查询效率,但如果不是条件查询列,或者经常使用插入、修改操作,或者磁盘空间不足时,不考虑创建索引
1.4 使用
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引
- 查看索引
show index from 表名;
-- 查看学生表已有的索引
show index from student;
- 创建索引
要创建索引的列是非主键、非唯一约束、非外键的字段
create index 索引名 on 表名(列名)
-- 创建课程表中name 字段的索引
create index idx_course_name on classes(name);
- 删除索引
自动创建的索引不能删除
drop index 索引名 on 表名;
-- 删除课程表中name字段的索引
drop index idx_course_name on course;
拓展:

索引保存的数据结构主要为B+树(N叉搜索树),及hash的方式。

在查询的时候,直接从根节点出发,判断当前要查的数据在节点上的那个区间中,决定下一步向哪走,进行添加和删除元素可能涉及节点的拆分和合并




二、事务
2.1 为什么要使用事务
-- 创建一个银行账户的表
create table accout(id int primary key auto_increment,name varchar(20) comment '账户名称',money decimal(11,2) comment '金额'
);
-- 插入数据
insert into accout(name, money) values('张三',10000),('李四',10000);
现在要实现张三向李四转账1000元
-- 张三账户减少1000
update accout set money=money-1000 where name = '张三';
-- 李四账户增加1000
update accout set money=money+1000 where name = '李四';
如果在执行第一个update 语句时,程序或者数据库崩溃了,或者是机器断电了,张三帐户会减少1000,但李四账户没有增加1000金额,此时就需要使用事务来控制,保证两条update语句要么都执行成功,要么都执行失败。
2.2 事务的概念
事务是指逻辑上的一组操作,组成这个操作的单元,要么全部成功,要么全部失。在不同环境中,都可以有事务,而对应在数据库中的,就是数据库事务。
以2.1 例子来说,事务,就是将这要实现的业务操作进行打包成一个整体,这个整体中的操作要么都成功,要么都失败(需要返回事务开始前的状态,即回滚),保证数据的一致性和完整性
2.3 事务的使用
- 开启事务:start transaction;
- 执行多条SQL语句
- 回滚或提交:rollback / commit
开启事务后,单独执行的每个 sql 都是独立的,这些sql 之间没有原子性‘,提交事务是使用 commit 将事务的操作持久化保存到数据库中。
当出现错误或异常情况时,可以使用 rollback 语句撤销事务中的所有更改。也就是说当执行 rollback 时,MySQL会撤销所有未提交的事务并回滚到事务开始之前的状态,回滚只适用于尚未提交的事务,一旦事务被提交,就无法再进行回滚操作。
拓展:




三、内容重点总结
- 索引:
索引是基于一个或多个列的数据结构,是一种数据库对象,它们存储有序的键值对,其中键是列的值,而值是指向表中数据行的物理位置。- 插入和删除数据频繁的表,不适用索引
- 对某列修改频率高的,该列不适合用索引
- 某列或某些列条件查询频率高的,可以对这些列创建索引
查看索引 show index on 表名
创建索引 create index 索引名 on 表名(列名)
删除索引 drop index 索引名 on 表名
- 事务:
事务是指逻辑上的一组操作,组成这个操作的单元,要么全部成功,要么全部失败
开启事务 start transaction
执行多条SQL语句
提交或回滚事务 commit / rollback
相关文章:
索引和事务
文章目录 一、索引1.1 概念1.2 作用1.3 使用场景1.4 使用 二、事务2.1 为什么要使用事务2.2 事务的概念2.3 事务的使用 三、内容重点总结 一、索引 1.1 概念 索引是一种特殊的文件,包含对数据表所有记录的引用指针。在MySQL中,索引是基于一个或多个列的…...
全场景数实融合聚焦北京——2023(第六届)行业信息技术应用创新大会隆重召开
2023年11月3日,2023(第六届)行业信息技术应用创新大会在北京裕龙国际酒店隆重举行。中国当前正处于经济转型的关键时期,数字经济的发展对中国新经济和新格局的形成至关重要,而信息技术是数字经济发展过程中必不可少的技术铺垫,企业对信息技术的应用非常依赖业务场景。因此,本届…...
深入理解强化学习——多臂赌博机:乐观初始值
分类目录:《深入理解强化学习》总目录 目前为止我们讨论的所有方法都在一定程度上依赖于初始动作值 Q 1 ( a ) Q_1(a) Q1(a)的选择。从统计学角度来说,这些方法(由于初始估计值)是有偏的。对于采样平均法来说,当所有…...
[黑马程序员Pandas教程]——DataFrame数据的增删改操作
目录: 学习目标DataFrame添加列 直接赋值添加列数据删除与去重 删除 df.drop删除行数据df.drop删除列数据数据去重 Dataframe去重Seriers去重修改DataFrame中的数据 直接修改数据replace函数替换数据按条件使用布尔值修改数据执行自定义函数修改数据 Series.apply(…...
【服务器】Java连接redis及使用Java操作redis、使用场景
一、Java连接redis-No-SQL 1、导入依赖 在你的项目里面导入redis的pom依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、连接redis 连接redis …...
Spark 基础知识点
Spark 基础 本文来自 B站 黑马程序员 - Spark教程 :原地址 什么是Spark 什么是Spark 1.1 定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎 Spark最早源于一篇论文 Re…...
动作捕捉系统通过SDK与LabVIEW通信
运动分析、VR、机器人等应用中常使用LabVIEW对动作捕捉数据进行实时解算。NOKOV度量动作捕捉系统支持通过SDK与LabVIEW进行通信,将动作数据传入LabVIEW。 一、软件设置 1、形影软件设置 1、将模式切换到后处理模式 2、加载一个刚体数据 3、打开软件设置 4、选择网…...
【PTE-day02 sqlmap操作】
1、sqlmap简介 🍇sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等. Sqlmap采用了以下5种独特的SQL注入技术 (1)…...
2021年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 不超过100个元素的有序数列,使用二分查找能找到指定的元素,可能的查找次数不包括? …...
2023.10.18 信息学日志
1. CF1689D Lena and Matrix 题目描述 n ⋅ m n \cdot m n⋅m 的矩阵,求矩阵上任意一点坐标使得到矩阵上的关键点曼哈顿距离最大值最小。数据范围: ∑ n ⋅ m ≤ 1 0 6 \sum n \cdot m \leq 10^6 ∑n⋅m≤106 题目概况 来源:Codeforces …...
Modbus封装库(Com,tcp,udp一应俱全)
自行封装在用的Modbus通迅库,集成了com,tcp,udp, 做个笔记吧, 以下头文件, #pragma once #include <functional> #include <vector> #include <string> #include <memory> #ifdef LIBMODBUS_EXPORTS #define LIBMODBUS_EXPORT_…...
专访HuggingFace CTO:开源崛起、创业故事和AI民主化丨智源独家
导读 HuggingFace CTO Julien Chaumond认为,在大模型时代,AI民主化至关重要。随着大语言模型和复杂人工智能系统的崛起,持续提升AI技术的可及性有助于确保这些技术的获取和控制不集中在少数强大实体手中。技术民主化促进了机会均等࿰…...
C++常用格式化输出转换
在C语言中可以用printf以一定的格式打印字符,C当然也可以。 输入输出及命名空间还不太了解的小伙伴可以看一看C入门讲解第一篇。 在C中,可以用流操作符(stream manipulators)控制数据的输出格式,这些流操作符定义在2…...
如何使用 Loadgen 来简化 HTTP API 请求的集成测试
引言 在编写 HTTP 服务的过程中,集成测试 1 是保证程序正确性的重要一环,如下图所示,其基本的流程就是不断向服务发起请求然后校验响应的状态和数据等: 为大量的 API 和用例编写测试是一件繁琐的工作,而 Loadgen 2 正…...
软件测试面试大家是不是一问到项目就不会了?
软件测试面试中,介绍做过的项目,可以说是必不可少的一道面试题了,对于面试的同学来说,该自己发挥呢? 把项目的所有功能噼里啪啦说一遍就完事了?当然不是,我们要搞清楚,面试官问这个…...
伐木猪小游戏
欢迎来到程序小院 伐木猪 玩法:控制小猪点击屏幕左右砍树,不能碰到树枝,考验手速与眼力,记录分数,快去挑战伐木吧^^。开始游戏https://www.ormcc.com/play/gameStart/199 html <script type"text/javascript…...
0007Java安卓程序设计-ssm基于Android的校园新闻管理系统
文章目录 **摘** **要**目 录开发环境 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把校园新闻管理与现在网络相结合,利用java技术建设校园新闻管理系统app,实…...
git增加右键菜单
有次不小心清理系统垃圾,把git右击菜单搞没了,下面是恢复方法 将下面代码存为.reg文件,双击后导出生效,注意,你安装的git必须是默认C盘的,如果换了地方要改下面注册表文件中相关的位置 Windows Registry …...
openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果
文章目录 openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果117.1 前提条件117.2 背景信息117.3 操作步骤 openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果 117.1 前提条件 审计功能总开关已开启。需要审计的审计项开关已开…...
学习代码20231106
解释代码:os.environ[“OMP_NUM_THREADS“] “1“ 这行代码涉及到 Python 的 os 模块和环境变量。它的作用是设置名为 “OMPNUMTHREADS” 的环境变量的值为 “1”。让我解释一下各部分的含义: 1.os.environ: 这是 Python 中的一个字典,包含…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
