Mysql(索引与事务)

embedded/2024/10/18 17:28:24/

索引查询与普通查询的区别

普通查询 :执行步骤为先对表进行遍历,然后把当前的行带入条件中进行判断,符合条件执行,不符合跳出。这种情况在遇见数据较多的情况下就会出现问题,效率太低。

索引查询:是对查询操作的优化手段,通过索引可以加快查询的速度(一个索引是针对一列来进行指定的,只有针对这一列条件进行查询时,查询速度才会被优化),避免对表进行遍历。缺点 由于索引查询生成索引需要一些列的数据结构,这些数据存贮在硬盘上占用内存,其次引进索引后对数据修改删除插入还要对索引进行修改,因此对数据的插入修改删除的速度也会大大降低。

 索引的操作

查看索引

show index from 表名;

 不加约束时不会生成索引,下图案例在对索引查询的时候显示的就是空,主键,unique,外键都会生成主键。

使用主键,会自动生成索引。

外键约束的索引 :

创建索引

create index 索引名字 on 表名 (列名);

删除索引

drop index 索引名字 on 表名;

 索引的背后逻辑(面试)

数据库索引的引入是一个改进的树形结构,B+树(N叉搜索树)。一个节点上存在N个key,划分成N个区间,每个节点上N个key中最后一个相当于当前子树的最大值,父节点上的每一个key都会以最大的身份在子节点的对应区间中存在因此父节点的key可能重复出现。B+树的最大优点就是,B+树会构成和链表一样的结构通过节点进行前后链接。这样在查询某一区间的数据只用知道首尾就可以把数据区间取出。相对于普通的树形结构减少了回溯的次数,减少了硬盘i/o的读取。

什么是事务

在早些年代会出现,A给B转了钱而B却并未收到,因此引入了事务中的回滚(指的是通过检查若没有执行成功就回退回去,比如A给B转了钱而B却并未收到时,那么就会触发回滚把A转出金额再返回给A)来解决这一问题。事务是把多个SQL打包成为一个整体,要么都执行,要么做到看起来都不执行的样子。

事务的特性:

  • 原子性:保证一系列操作都能正确执行或者恢复如初
  • 一致性:事务执行之前之后,数据都不能太离谱
  • 持久性:事务做出的修改,都是在硬盘上持久保存的。服务器重启数据依然存在
  • 隔离性:解决数据库处理并非事务中出现的问题

并发处理事务中的问题

1.“脏读”:指的是A正在写数据的过程,B在读取A的数据,随后A修改了数据,导致B之前读入的数据变成了无效数据。

2.重复读:指的是并发执行事务过程中,如果事务A在内部多次读取同一个数据的时候,出现不同的情况,这种情况就是不可重复读。简单说对一个事务不能出现两次读取是不同的事务

3.幻读:指的是一个事务A执行过程中两次读取并未发生数据内容的变化,但是结果集发生了变化(结果集中临时表多了或少了)

如何解决并发处理事务中的问题

  • 解决脏读的方法就是通过对核心数据进行“写加锁”(写的时候不能读)
  • 解决重复读的方法是“读枷锁”(读的时候不能写)
  • 解决重幻读的方法是保证绝对的串行执行事务,此时完全没有并发

事务开启

start transaction;//开启事务后执行的每个sql都自成一个体系

事务结束

commit; //事务结束

主动触发回滚

rollback;//主动触发回滚,一般是要搭配一些逻辑条件进行使用


http://www.ppmy.cn/embedded/126327.html

相关文章

10.11 Qt

数据库查询案例 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlRecord> #include <QSqlError> #include <QInputDialog>QT_BEGIN_NAMESPACE namespace Ui { …

04_23 种设计模式之《单例模式》

文章目录 一、单例模式基础知识单例模式有 3 个特点&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这种模式通常用于管理共享资源&#xff0c;如…

【C++设计模式】行为型模式:中介者模式

行为型模式&#xff1a;中介者模式 中介者模式通过引入一个中介者对象来集中控制对象之间的交互。这样可以解耦多个对象之间的复杂交互关系&#xff0c;使系统更易于维护和扩展。 假设我们有一个简单的聊天室应用&#xff0c;其中有每个用户可以发送群聊消息给其他用户&#…

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

Django ORM - 聚合查询

Django ORM - 聚合查询 Django ORM&#xff08;对象关系映射&#xff09;是一个强大的工具&#xff0c;它允许开发人员通过Python代码而不是SQL语句来操作数据库。在Django中&#xff0c;聚合查询是一种用于对数据库中的数据进行统计和分析的功能。通过使用Django ORM的聚合查…

你真的了解Canvas吗--解密七【ZRender篇】

书接上文你真的了解Canvas吗--解密六【ZRender篇】 目录 ❓解惑环节 再次梳理流程 step - 1 step - 2 step - 3 step - 4 冒泡函数dispatchToElement 总结 ❓解惑环节 首先来回答一下 先来看看目前调用on函数的地方 Eventful的属性_$handlers的key就有click, dbcl…

Golang 垃圾回收机制

垃圾回收机制 垃圾回收是程序语言自行管理内存的一种机制,它的主要原理是检测哪些内存块已经不再被使用的情况,然后回收这些内存块,以供后续程序使用. GC和手动释放内存的比较 GC的优势在于不需要程序员在编写程序时关心内存分配问题,只需专注于程序的编写即可,而手动释放内…

K210(openMV)与STM32 通信教程

目录 前言&#xff1a; 一、K210 串口部分教程 二、STM32部分 前言&#xff1a; 很多打比赛的同学&#xff0c;通常只是用K210 或者openMV来进行视觉部分的信息采集&#xff0c;传输数据给STM32&#xff08;或者其他主控那边&#xff09;进行对分析&#xff0c;对小车或者舵…