索引和事务
文章目录
- 一、索引
- 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 中的一个字典,包含…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
