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

news2024/11/16 15:57:20

🔥博客主页: 【小扳_-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)叶子节点形成了一个双向链表,便于数据的排序及区间范围查询。

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

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

相关文章

【ElasticSearch】es索引、映射、文档基本操作复杂查询

各位小伙伴们大家好,欢迎来到这个小扎扎的ElasticSearch专栏,本篇博客由B战尚硅谷的ElasticSearch视频总结而来,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 🌆 内容速览 1 es数据格…

[Electron]中的BrowserView

Electron中BrowserView BrowserView 被用来让 BrowserWindow 嵌入更多的 web 内容。 它就像一个子窗口,除了它的位置是相对于父窗口。 这意味着可以替代webview标签. 示例 const { app, BrowserView, BrowserWindow } require(electron) ​ app.whenReady().the…

[服务器]RTSP服务与ffmpeg推送-简单搭建-Windows与Linux

文章目录 下载地址rtsp服务-mediamtx推流工具-ffmpegVLC播放器 Linux下载安装解压启动 Windows下载安装解压启动 VLC查看视频串流window查看本地摄像头 公司来了个临时需求,正好自己一直想搞一下,例如在VR Chat上放自己的视频[滑稽],所以简单…

Matlab|2机5节点牛拉法(含报告)

目录 主要内容 下载链接 主要内容 采用牛拉法计算2机5节点的潮流计算程序,程序迭代稳定,运行可靠,含报告资料。 下载链接

.NET高级面试指南专题十五【 原型模式介绍,Clone要这样去用】

介绍: 原型模式是一种创建型设计模式,其主要目的是通过克隆现有对象来创建新对象,而不是通过实例化新的对象。这种模式在需要创建相似对象时非常有用,尤其是当对象的创建过程比较昂贵或复杂时。 实现原理: 原型模式通过…

探索Web中的颜色选择:不同取色方法的实现

在Web开发中,提供用户选择颜色的功能是很常见的需求。无论是为了个性化UI主题,还是为了图像编辑工具,一个直观且易用的取色器都是必不可少的。本文将介绍几种在Web应用中实现取色功能的方法,从简单的HTML输入到利用现代API的高级技…

Kafka MQ 主题和分区

Kafka MQ 主题和分区 Kafka 的消息通过 主题 进行分类。主题就好比数据库的表,或者文件系统里的文件夹。主题可以被分为若干个 分区 ,一个分区就是一个提交日志。消息以追加的方式写入分区,然 后以先入先出的顺序读取。要注意,由…

OPC UA 学习:文件传输

本博文是OPC 10000-20: UA Part 20: File Transfer 的学习笔记。 OPC UA的客户端需要读写服务器端的文件,OPCUA 规范中,是通过文件模型实现的。客户端通过调用文件模型中的方法来处理文件。 在控制系统中,需要下载配置文件,工艺文…

掌握java中继承

目录 1.概念: 2.使用: 3.super关键字 4.子类构造方法 5.super和this关键字 6.初始化时代码块的执行顺序 7.继承的方式 8.final关键字 1.概念: 是面向对象程序设计代码可以重复使用的重要手段,允许程序员在保持原有类特性的…

java注释的详尽解析

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

漏洞复现-蓝凌LandrayOA系列

蓝凌OA系列 🔪 是否利用过 优先级从高到低 发现日期从近到远 公司团队名_产品名_大版本号_特定小版本号_接口文件名_漏洞类型发现日期.载荷格式LandrayOA_Custom_SSRF_JNDI漏洞 LandrayOA_sysSearchMain_Rce漏洞 LandrayOA_Custom_FileRead漏洞

成功解决TypeError: ‘str‘ object does not support item assignment

成功解决TypeError: ‘str’ object does not support item assignment 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 …

Linux系统安装及简单操作

目录 一、Linux系统安装 二、Linux系统启动 三、Linux系统本地登录 四、Linux系统操作方式 五、Linux的七种运行级别(runlevel) 六、shell 七、命令 一、Linux系统安装 场景1:直接通过光盘安装到硬件上(方法和Windows安装…

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。 追赶 Sora,成为了很多科技公司当下阶段的新目标。研究者们好奇的是:Sora 是如何被 OpenAI 发掘出来的?未来又有哪些演进和应用方向? Sora 的技术报告披露了一些技术细节&…

反编译修改halcondonet.dll的名字

安装ILSpy 打开halcondonet.dll 用VS打开 点击生成Dll会提示很多错误 然后点击错误,所有点一遍,错误基本会自己消失, 还需要把.net改为4.5.2 然后生成成功 把名称改为mysql5dotnet 找到HalconAPI类,将里面的所有字符串“hal…

linux下改变主机名,永久生效的方法

hostnamectl set-hostname test 例子 #支持大写必须就要这样写 hostnamectl set-hostname 名称 --static

LCR 164. 破解闯关密码

解题思路&#xff1a; 贪心 class Solution {public String crackPassword(int[] password) {String[] strs new String[password.length];for(int i 0; i < password.length; i)strs[i] String.valueOf(password[i]);Arrays.sort(strs, (x, y) -> (x y).compareTo(…

全球参考系统(WRS)概述及常用工具汇总

1986年&#xff0c;美国航空航天局&#xff08;NASA&#xff09;定义了一系列数据处理"级别"&#xff0c;用以区分源于其地球观测系统&#xff08;EOS&#xff09;卫星获取的影像生成的标准数据产品。给定任何数据产品&#xff0c;我们可以根据其级别来判断其在生产过…

Docker下Jenkins打包java项目并部署

docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…

Qt初识 - 编辑框 | 按钮 | 命名规范

目录 一、编辑框 (一) Designer中的编辑框 (二) Code中的编辑框 二、按钮 (一) Designer中的按钮 (二) Code中的按钮 三、Qt中的命名规范 一、编辑框 (一) Designer中的编辑框 进入到Designer界面中 找到Input Widgets目录 找到该目录下的 将这个控件拉出去 双击就可…