MySQL 篇-快速了解事务、索引

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
  

文章目录

        1.0 事务概述

        1.1 事务四大特性(ACID)

        2.0 索引概述

        2.1 关于 “索引一定要创建在主键上?” 的问题

        2.2 索引操作语法

        2.3 索引结构


        1.0 事务概述

        事务是作为单个逻辑工作单元执行的一组数据库操作,要么全部成功执行,要么全部失败回滚,保证数据的完整性。

        默认 MySQL 的事务是自动提交的,也就是说,当执行一条 DML 语句,MySQL 会立即隐式的提交事务。

        用简单通俗的话来说,将 SQL 每一条语句都 “打包” 起来一起执行,如果某一条语句出现错误,则进行回滚操作,最终可以使得数据回复到原来的样子;如果 “打包” 在一起的语句都没有出现错误,则进行提交操作,数据就会进行相应的变化并保持持久性。

语法结构:

-- 开启事务,接下来的 SQL 语句都会打包起来
start transaction;

-- 如果这些语句都没有出现错误的话,可以提交事务
commit;

-- 如果这些语句,哪怕有一条语句出现错误,则操作回滚事务
rollback;

        1.1 事务四大特性(ACID)

        1)原子性(A):事务是不可分割的最小单元,要么全部成功,要么全部失败。

        2)一致性(C):事务完成时,必须使所有数据都保持一致状态。

        3)隔离性(I):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

        4)持久性(D):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

        2.0 索引概述

        在 MySQL 中,索引是一种数据结构,用于加快数据库表中数据的检索速度。通过在表的列上创建索引,可以帮助数据库系统快速定位到符合检索条件的记录,从而提高查询效率。

索引的优点:

        提高数据查询的效率,降低数据库的 IO 成本。通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 消耗。


索引的缺点:
        索引会占用存储空间,索引大大提高了查询效率,同时却也降低了 insert, update, delete 的效率。

        总的来说,优点大于缺点,实际中大多数的操作都是查询操作,至于插入、修改、删除的操作占小部分。

        2.1 关于 “索引一定要创建在主键上?” 的问题

        不,索引并不一定要创建在主键上。虽然主键通常会自动创建一个唯一索引,但在实际数据库设计中,还可以在其他列上创建索引以提高查询性能。
        在设计索引时,需要根据实际的查询需求和数据访问模式来选择合适的列进行索引。一些常见的情况包括:

        主键索引:主键用于唯一标识表中的每条记录,通常会自动创建一个主键索引。主键索引在查询单条记录时非常高效。


        外键索引:外键用于建立表与表之间的关联关系,可以在外键列上创建索引以加快关联查询的速度。


        经常用于查询的列:如果某个列经常用于查询条件或排序操作,可以考虑在该列上创建索引,以提高查询效率。


        经常用于连接的列:如果某个列经常用于连接操作(如 JOIN 语句),可以在连接列上创建索引,加速连接操作。

        补充:在 MySQL 中,默认加上主键约束、UNIQUE 约束都会自动创建索引

        2.2 索引操作语法

        1)创建索引

create [unique] index 索引名 on 表名(字段名);

        2)查看索引

show index from 表名;

        3)删除索引

drop index 索引名 on 表名;

        4)举个例子,在创建图书表,表中的字段有 id, name, author, update_time ,为了通过查询书名来快速得到书的信息,就可以在书名这个字段创建索引。

代码如下:

create table books(
    id tinyint unique primary key comment '序号',
    name varchar(10) not null comment '书名',
    author varchar(10) not null comment '作者',
    update_time datetime comment '更新时间'
)comment '图书';

-- 添加数据
insert into books
values (1, 'Java', '小童', now()),
       (2, 'C++', '小鱼', now()),
       (3, 'Python', '小吴', now());

创建索引:

-- 创建索引在书名上,可以通过查找书名,快速找到
create index index_books_name on books(name);

查看表中的索引:

-- 查看表中的所有索引
show index from books;

        有两个字段创建了索引,一个主键 (id) 是默认创建了索引,另一个 (name) 是自己手动创建的索引。

删除表中的索引:

-- 删除表中的索引
drop index index_books_name on books;

再来查看表中的索引情况,

        可以看到 name 这个字段上的索引已经被删除了。

       

        2.3 索引结构

        在上面说到,索引就是一个数据结构,创建索引,就是在将该列中的数据按照规定的数据结构进行重新存储整理起来,从而在查询过程中,可以快速的查询相对应的数据。所以对于没有创建索引,查询指定的数据时,是通过全盘扫描的方式进行。

        那么 MySQL 中,索引是基于 B 树(B-tree) 或者 B+ 树(B+tree) 结构实现的,这些树结构是一种高效的数据结构,可以加速数据库表中的检索速度。

B 树 (B-tree):
        B 树是一种平衡的多路搜索树,用于在数据库中存储和管理索引数据。B 树的特点是每个节点可以存储多个关键字,并且具有平衡性,保证查询的时间复杂度为 O(logN) 。在 MySQL 中,普通索引、唯一索引和主键索引通常都是基于 B 树结构实现的。


B+ 树 (B+tree):
        B+ 树是在 B 树的基础上做了一些优化,更适合作为数据库索引的数据结构。B+ 树的非叶子节点只存储索引字段的值,而实际数据都存储在叶子节点上,这样可以减少磁盘 I/O 操作。B+ 树的叶子节点之间通过指针连接,形成一个有序链表,方便范围查询和排序操作。在 MySQL 中,InnoDB 存储引擎的聚簇索引(Clustered Index)就是基于 B+ 树结构实现的。

对于 B+ 树来说:1)每一个节点可以存储多个 key (有 n 个 key ,就有 n 个指针)。2)所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。3)叶子节点形成了一个双向链表,便于数据的排序及区间范围查询。

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

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

相关文章

【生态适配】亚信安慧AntDB数据库与OpenCloudOS、TencentOS Server五款产品完成兼容互认

日前,亚信安慧AntDB数据库与OpenCloudOS8、OpenCloudOS9、TencentOS Server 2、TencentOS Server 3、TencentOS Server 4五款操作系统完成兼容互认。经过严格测试,亚信安慧AntDB数据库与这五款操作系统兼容良好,整体运行稳定。 图1&#xff1…

stm32普通定时器脉冲计数(发送固定脉冲个数),控制步进电机驱动器

拨码开关设置驱动器,细分 方法思路:用通用定时器TIM2,1ms产生一次中断;在中断里做IO反转; 发送10个脉冲信号

签约仪式如何策划和安排流程?如何邀约媒体现场见证报道

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 签约仪式的策划和安排流程,以及邀约媒体现场见证报道,都是确保活动成功和提升影响力的关键环节。以下是一些建议: 签约仪式的策划和安排流程 明确目标…

patreon订阅

订阅制度: 创作者可以创建一个Patreon页面,邀请粉丝成为其“赞助者”或“粉丝”。这些粉丝可以选择每月或每个创作周期为创作者提供一定数额的资金支持,形成了一种订阅模式。 奖励层次: 创作者通常会设置不同的奖励层次&#xff…

MySQL安装使用(mac)

目录 一、下载MySQL 二、环境变量 三、启动 MySql 四、初始化密码设置 一、下载MySQL 打开 MySql 官方下载页面 我是macOS12,所以选择了8.0.30 下载完成之后,打开安装,一直下一步安装完成,在最后安装完成时,会弹出…

一周学会Django5 Python Web开发-Django5内置模板引擎-模板上下文变量

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计32条视频,包括:2024版 Django5 Python we…

Linux系统Docker部署DbGate并结合内网穿透实现公网管理本地数据库

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-66GkyG9g7oNq7tl8 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

Windows®、Linux® 和 UNIX® 系统都适用的远程桌面工具 OpenText ETX

Windows、Linux 和 UNIX 系统都适用的远程桌面工具 OpenText ETX 为 Windows、Linux 和 UNIX 实施精益、经济高效的虚拟化;提供完整的远程 Windows 可用性;以类似本地的性能远程工作;安全地保护系统和知识产权(IP)&am…

k8s-生产级的k8s高可用(1) 24

高可用集群 实验至少需要三个master(控制节点),一个可以使外部可以访问到master的load balancer(负载均衡)以及一个或多个外部节点worker(也要部署高可用)。 再克隆三台主机 清理并重启 配置两…

YOLOv7原创改进:原创自研 | CVPR2024 DCNv4结合YOLOv9 SPPELAN二次创新 | 涨点小能手

💡💡💡本文独家改进: CVPR2024 DCNv4结合YOLOv9 SPPELAN二次创新,结构图如下: 改进结构图: 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 收录 YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.html 💡�…

银河麒麟服务器ky10 server wvp镜像制作

在线安装docker yum install docker -y cat >/etc/docker/daemon.json<<EOF{"registry-mirrors": ["https://registry.docker-cn.com","https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"]} EOF systemctl start …

java注释的详尽解析

一、什么是注解 (1).注解的作用 ①&#xff1a;注解一般用于对程序的说明&#xff0c;就像注释一样&#xff0c;但是区别是注释是给人看的&#xff0c;但是注解是给程序看的。 ②&#xff1a;让编译器进行编译检查的作用&#xff0c;比如下边这个Override注解是重写的意思&am…

Python 对Excel工作表中的数据进行排序

在Excel中&#xff0c;排序是整理数据的一种重要方式&#xff0c;它可以让你更好地理解数据&#xff0c;并为进一步的分析和报告做好准备。本文将介绍如何使用第三方库Spire.XLS for Python通过Python来对Excel中的数据进行排序。包含以下三种排序方法示例&#xff1a; 按数值…

@EnableWebMvc介绍和使用详细demo

EnableWebMvc是什么 EnableWebMvc 是 Spring MVC 中的一个注解&#xff0c;它用于启用 Spring MVC 框架的基本功能&#xff0c;以便你可以使用 Spring MVC 提供的特性来处理 Web 请求。 通常情况下&#xff0c;在基于 Spring Boot 的应用中&#xff0c;并不需要显式地使用 Ena…

NASA数据集——GOES-16卫星的高级图像和地球观测数据

简介 GHRSST NOAA/STAR GOES-16 ABI L2P America Region SST v2.70 dataset in GDS2 ABI_G16-STAR-L2P-v2.70是美国国家航空航天局&#xff08;NASA&#xff09;的一种卫星数据处理产品。这个产品是由GOES-16&#xff08;也称为GOES-East&#xff09;卫星的先进基线/全球地球…

IT廉连看——Uniapp——配置文件pages

IT廉连看——Uniapp——配置文件pages [IT廉连看] 本堂课主要为大家介绍pages.json这个配置文件 一、打开官网查看pages.json可以配置哪些属性。 下面边写边讲解 新建一个home页面理解一下这句话。 以下一些页面的通用配置 通用设置里我们可以对导航栏和状态栏进行一些设…

java SSM售后服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

源码特点 java SSM售后服务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采用B/…

【C语言】指针相关知识点

什么是指针&#xff1f; 指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向&#xff08;points to&#xff09;存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元&#xff0c;可以说&#xff0c;地…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理

继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btstack_main,在btstack_main里面首先做一些初始化,然后…

【校园导航小程序】2.0版本 静态/云开发项目 升级日志

演示视频 【校园导航小程序】2.0版本 静态/云开发项目 演示 首页 重做了首页&#xff0c;界面更加高效和美观 校园指南页 新增了 “校园指南” 功能&#xff0c;可以搜索和浏览校园生活指南 地图页 ①弃用路线规划插件&#xff0c;改用SDK开发包。可以无阻通过审核并发布…