【MySQL】索引和事务

news2024/11/16 3:17:14

秋招
秋招中最经典,最高频的面试题

文章目录

  • 索引 index
    • 操作索引的 SQL
      • 查看索引
      • 创建索引
      • 删除索引
  • 事务
    • 操作
    • 四个核心特性

索引 index

在数据库中建立一个特殊的“目录“(一系列特定的数据结构),为了加快查询速度

select 查询都是遍历查询,比较复杂 O(N) 级别复杂度

嵌入式设备
咱们平时用的电脑、手机这些都是“计算机”,还有一些其他设备,也是包含“计算机”的,例如:路由器、冰箱、洗衣机、空调、投影仪等等,这些设备的“计算机”不是用来计算的,是作为辅助设施。

嵌入式系统
这些计算机往往非常小,硬件配置也比较低,这样的计算机系统就叫“嵌入式系统”。

操作索引的 SQL

查看索引

  • show index from 表名;
    • primary keyforigen keyunique 都能自动生成索引
    • 索引都是针对列生成的
      搜索创建了索引的列才会加快查询速度
      image.png

创建索引

  • create index 索引名 on 表名(列名);
    • 创建索引需要在最初创建表的时候规划好
    • 危险操作
      image.png

删除索引

  • drop index 索引名 on 表名;
    • 只能删除自己创建的,不能删自动生成的
    • 危险操作

事务

  • 把多个要执行的 SQL 打包成一个“整体”,其能做到要么都完成执行,要么一个都不执行,防止出现“半吊子”
  • 同时,也把事务支持的上述“特性”称为“原子性
  • 批量执行 SQL问题

回滚(rollback)

  • 不是没执行,而是在出错的时候,数据库会自动执行“还原操作”,将已经执行过的 SQL “撤销“了,效果就和没执行一样。
  • 数据库存在一系列“日志体系”,记录在文件中,记录了每一步 SQL 的操作,可以看到对数据进行了哪些修改,回滚时就参考这些信息进行完成。
  • 既可应对“程序崩溃”,也可应对“主机掉电”

操作

  1. 开启事务
    • start transaction;
    • 一般开发中不会这么搞,都是通过“代码”的方式开启事务,批量执行
  2. 提交事务
    • commit;

四个核心特性

  1. 原子性(最重要)

    • 事务内的所有操作作为一个整体被执行,不会出现部分完成的情况。
  2. 一致性

    • 事务执行前后,数据库中的数据都是“合法状态”,不会出现非法的临时结果的状态
  3. 持久性

    • 事务执行之后,就会修改硬盘上的数据,持久生效
  4. 隔离性(最常考)

    1. 事务并发执行的时候,相互之间产生的影响是

      • MySQL 是一个“客户端—服务器”结构程序,所以一个服务器通常会给多个客户端同时提供服务,因此这多个客户端就同时给这个服务器提交事务来执行。与之相对,服务器就需要同时执行多个事务,此时就是“并发执行

      • 若这些同时执行的事务,恰好是针对同一个表进行增删改查,此时会出现一些问题

        1. 脏读(数据过时了)

          • 在一个事务中读取了另一个未提交事务的数据。这意味着读取的数据可能是不正确的、不一致的或者“脏”的,因为这些数据可能随时会被回滚,导致之前读取到的数据无效。
          • 例如,事务A读取了事务B未提交的数据,但事务B后来可能由于某种原因回滚了,那么事务A读取到的数据就是“脏”的,因为它基于了永远不会在数据库中实际存在的数据。
          • 解决办法:给写操作加锁
            在进行修改操作的时候,不能进行读操作
        2. 不可重复读

          • 当一个事务在读取某个数据项后,在该事务还未结束时,另一个并发事务修改或删除了这个数据项,并提交了修改。这时,如果第一个事务再次读取这个数据项,就可能会读取到已经被修改或不存在的数据,导致两次读取的结果不一致。
          • 例如:假设有一个银行账户,初始余额为1000元。事务A开始并读取账户余额,看到是1000元。此时,事务B开始并执行了一个存款操作,向该账户存入了500元,然后提交了事务。如果事务A再次读取该账户的余额,它会发现余额已经变成了1500元,与之前的1000元不一致。这就是“不可重复读”的一个例子,因为事务A在两次读取之间看到了不一致的数据。
          • 解决办法:给读操作加锁
            在进行读取操作时,其他事务不能修改它正在读的数据
        3. 幻读

          • 相当于“不可重复读”的特殊情况
          • 它发生在一个事务读取了几行数据后,另一个并发事务插入或删除了一些行,然后第一个事务再次读取同样的数据范围时,发现出现了“幻影”行或某些行消失了。
          • 例如,假设有一个事务正在读取一个范围内的订单数据,它先读取了10行数据。此时,另一个事务插入了一个新的订单到这个范围内。当第一个事务再次执行相同的查询时,它会发现现在有11行数据,多出来的这一行就像是“幻影”一样突然出现了。
          • 解决办法:串行化
            每个事务都必须等待前一个事务完成后才能开始执行,这样可以确保事务之间不会互相干扰,从而保持数据的一致性和完整性。
    2. 隔离级别

      • 可通过配置文件来设置当前服务器的隔离级别的级别

      • 不同的隔离级别会使事物之间并发执行的影响产生不同的差别,从而影响到上述三个问题的情况

      • 四个隔离级别

        1. read uncommitted:读未提交

          • 一个事物可以读取另一个事务未提交的数据,此时就可能会产生“脏读”、“不可重复读”和“幻读”三种问题。
          • 但此时,多个事务并发执行程度最高的。(速度最快
        2. read committed:读已提交

          • 一个事物只能读取另一个事务提交后的数据(给写操作加锁了),此时可能会产生“不可重复读“和“幻读“问题。(“脏读“问题解决了
          • 此时,并发程度降低执行速度变慢,同时也称为:事物之间的隔离型提高
        3. repeatable read:可重复读

          • 事务在开始时创建一个快照,事务内的查询都是基于这个快照进行的,从而确保了在同一个事务内多次读取相同数据时会看到一致的结果。相当于是给“写操作”和“读操作”都加锁了。此时可能产生“幻读”问题(“脏读”和“不可重复读”问题解决了
          • 并发程度进一步降低执行速度进一步变慢,事物之间的隔离性进一步提高
        4. serializable:串行化

          • 它要求事务串行执行,即事务之间不会并发执行,所有的事务都是在服务器上一个接一个的执行,从而避免了“脏读”、“不可重复读”和“幻读”的所有问题。
          • 并发程度最低执行速度最慢隔离型最高数据最准确

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

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

相关文章

Go项目依赖:Tidy命令与离线依赖获取

引言 Go语言以其简洁性和高效性在开发者中广受欢迎,而Go的模块系统则为依赖管理提供了极大的便利。本文将介绍如何使用go mod tidy命令来整理项目的依赖关系,以及在无法在线获取依赖的情况下,如何通过离线方式获取并使用依赖。 使用go mod …

数论基础知识(下)

目录 欧拉函数 n的分解质因数求欧拉函数 试除法求欧拉函数值 积性函数 筛法 朴素筛 埃氏筛 欧拉筛 (线性筛) 线性筛欧拉函数 快速幂 同余 欧拉定理 费马小定理 乘法逆元 欧拉函数 互质 : ∀ a , b ∈ N ,若 gcd ( a , b ) 1 ,则 a…

Java零基础之多线程篇:线程控制

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

RISC-V竞赛|第二届 RISC-V 软件移植及优化锦标赛报名正式开始!

目录 赛事背景 赛道方向 适配夺旗赛 优化竞速赛 比赛赛题(总奖金池8万元!) 🔥竞速赛 - OceanBase 移植与优化 比赛赛程(暂定) 赛事说明 「赛事背景」 为了推动 RISC-V 软件生态更快地发展&#xff0…

健身动作AI识别,仰卧起坐计数(含UI界面)

用Python和Mediapipe打造,让你的运动效果一目了然! 【技术揭秘】 利用Mediapipe的人体姿态估计,实时捕捉关键点,精确识别动作。 每一帧的关键点坐标和角度都被详细记录,为动作分析提供数据支持。 支持自定义动作训练&a…

Jave-this关键字

目录 1.this关键字 先看一段代码,并分析问题 什么是this 案例演示 2.this的注意事项和使用细节 1.this关键字 先看一段代码,并分析问题 什么是this this就 代表的是当前对象。 this可以大概理解成“我的” ,比如我的书包,这…

基于Java中的SSM框架实现大创项目申报管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现大创项目申报管理系统演示 摘要 经济的高速发展进一步推动了种类繁多的项目落地,传统的项目在申报过程中主要通过纸质文件的方式实现申报信息的传递,同时不同的项目内容所对应的申报资料模板也有所差异,人工整理的提…

没有显卡,怎么玩AI绘图?

或许很多人跟我一样,没有显卡,但又很想玩AI绘图,但本地绘图怕是无缘了,只能借助云GPU的方式了。 今天跟大家分享一下一个简单目前可白嫖无门槛的方法实现无显卡也能玩AI绘图。 方案就是ComfyUIBizyAir云节点。 ComfyUI介绍 来…

【软考】虚拟存储器

目录 1. 说明2. 定义3. 工作原理4. 管理方式5. 优点6. 例题6.1 例题1 1. 说明 1.在概念上,可以将主存存储器看作一个由若干个字节构成的存储空间,每个字节(称为一个存储单元)有一个地址编号,主存单元的该地址称为物理地址(Physical Address)…

数值分析——三次样条插值

系列文章目录 数值分析——拉格朗日插值 数值分析——牛顿插值多项式 数值分析——埃尔米特(Hermit)插值 数值分析——分段低次插值 文章目录 系列文章目录前言一、理论推导1.三次样条函数2.三次样条插值函数的求解条件3.三次样条插值函数的建立 二、MA…

简单反射型XSS的复现

xss反射型攻击&#xff1a; 1.最简单的漏洞复现&#xff1a; 这里我们有一个最简单的网页&#xff1a;由于地址不存在&#xff0c;所以图片加载不出来。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta…

FP8量化

https://arxiv.org/html/2402.16363v5 LLama3.1用了FP8量化&#xff1a; FP8也可以用scaling factor来扩大表示范围&#xff0c;对吧&#xff1f;

开源在线剪切板 PrivateBin 安装和使用教程

我们经常需要在网上快速分享一些文本内容&#xff0c;比如代码片段、临时笔记或者敏感信息。传统的在线剪贴板服务虽然使用方便&#xff0c;但往往缺乏足够的隐私保护。 那么&#xff0c;有没有一种既方便又安全的在线文本分享方式呢&#xff1f;今天我要向大家推荐一个优秀的…

常见的图像融合方法

这里我们将介绍一些常用的图像融合方式&#xff0c;并不涉及到诸如CutMix、MixUp、TokenMix、Mosaic、Copy-Paste等图像增强方法。 首先是读取图像&#xff0c;我们这边采用了PIL库进行&#xff0c;那么读进来就应该是一个Image对象。下面介绍Image对象与array的转换方式。 f…

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测

土地利用/土地覆盖数据是生态、环境和气象等领域众多模型的重要输入参数之一。基于遥感影像解译&#xff0c;可获取历史或当前任何一个区域的土地利用/土地覆盖数据&#xff0c;用于评估区域的生态环境变化、评价重大生态工程建设成效等。借助CLUE模型&#xff0c;实现对未来土…

AI9-文本识别

本章主要介绍文本识别算法的理论知识,包括背景介绍、算法分类和部分经典论文思路。 通过本章的学习,你可以掌握: 1. 文本识别的目标 2. 文本识别算法的分类 3. 各类算法的典型思想 1 背景介绍 文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个…

pytorch的入门使用

pytorch安装略&#xff01; 一.张量Tensor 张量是一个统称其中包含0阶&#xff0c;1阶&#xff0c;2阶&#xff0c;3阶&#xff0c;4阶&#xff0c;.......n阶。 0阶&#xff1a;标量&#xff0c;常数&#xff0c;0-D Tensor 1阶&#xff1a;向量&#xff0c;1-D Tensor 2…

使用java反编译工具jad

文章目录 反编译工具 JAD下载配置环境变量使用其他反编译工具 JD-GUI 反编译工具 JAD 反编译是指将编译后的字节码文件&#xff08;.class 文件&#xff09;转换回可读的 Java 源代码。JAD (Java Decompiler) 是一个经典的反编译工具&#xff0c;广泛用于将 Java 字节码反编译…

国内AI大模型168个,哪个最有前途?

168个国产大模型&#xff0c;都是什么来头&#xff1f; 1785年&#xff0c;瓦特改进了蒸汽机&#xff0c;人类从此摆脱了手工业的桎梏&#xff0c;迈向辉煌的蒸汽时代。 1870年&#xff0c;第二次工业革命光芒四溢&#xff0c;人类踏上了电气时代的漫长征程。 20世纪70年代后…

手机有两个卡槽分别放什么卡,这篇文章建议收藏!

你发现了吗&#xff0c;我们现在对于手机卡的需求是越来越大了&#xff0c;相信大多数用户手上都不止一张SIM卡&#xff0c;大部分都是双卡&#xff0c;甚至三卡了&#xff0c;那么&#xff0c;这些卡槽你真的利用对了吗&#xff1f; 这篇文章就告诉大家&#xff0c;如何更好的…