面试高频:Mysql事务

news2024/11/13 14:58:40

在MySQL中,事务是用于管理数据库操作的一组语句,它们作为一个整体执行,以确保数据的一致性和完整性。事务提供了一种机制,可以将多个操作合并为一个原子单元,这样要么所有操作都成功执行,要么在出现错误时,所有操作都会被回滚,恢复到事务开始之前的状态。这种机制对于处理涉及多条记录或复杂数据操作的场景尤为重要。那么,就让我们开始MySQL事务的学习吧!!!

目录

​编辑

1 为什么使用事务

2 事务的概念

3 使用

4.问题

1)脏读 

2)不可重复读

3)幻读

5所产生问题与隔离性的关系 

1)read uncommitted 读未提交.

2)read committed 读已提交

3)repeatable read 可重复读

4)serializable 串行化



1 为什么使用事务

准备测试表:

drop table if exists accout;
create table accout(
 id int primary key auto_increment,
 name varchar(20) comment '账户名称',
 money decimal(11,2) comment '金额'
);
insert into accout(name, money) values
('阿里巴巴', 5000),
('四十大盗', 1000);

比如说,四十大盗把从阿里巴巴的账户上偷盗了2000元

-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';

假如在执行以上第一句SQL时,出现网络错误,或是数据库挂掉了,阿里巴巴的账户会减少2000,但是 四十大盗的账户上就没有了增加的金额。

解决方案:使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败。

2 事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

在不同的环境中,都可以有事务。

对应在数据库中,就是数据库事务。

3 使用

(1)开启事务:start transaction;

(2)执行多条SQL语句

(3)回滚或提交:rollback/commit;

说明:rollback即是全部失败,commit即是全部成功。

start transaction;
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;

数据库如何知道,具体是怎样回滚的?

数据库内部存在一系列的“日志体系”,记录到‘文件中’

-----既可以应对“程序崩溃”,也能应对“主机掉电”

-----虽然掉电,但是回滚的日志还是存在的.此时下次主机上电,下次数据库启动的时候就可以根据回滚日志的内容,就进行回滚操作了.

当开启事务的时候,此时每一步执行的sql,都对数据进行了哪些修改,这些信息就会记录在案,
后续如果需要回滚,就可以参考之前记录的内容,进行还原了.

drop database这样的操作能回滚回来吗 ??

不能的 !!!!

回滚操作,只是针对“事务”来说的 ~~


1.这样的操作不能放到事务中去执行

2.这个操作,也不算执行出错,算是“正确执行了sql"

4.问题

此时,如果这些同时执行的事务,恰好也是针对同一个表,进行一些增删改查,此时
就可能会引入一些问题 ~~

1)脏读
2)不可重复读
3)幻读问题

1)脏读 

有两个事务A和B并发执行.
其中事务A在针对某个表的数据进行修改.
A执行过程中,B也去读取这个表的数据.
当B读完之后,A把表里的数据又改成别的.

这就导致,B读到的数据,就不是最终的“正确数据”
而是读到了 临时性的,“脏数据”(往往指的是“数据过期,过时了”错误的数据了 ~~)

解决措施:

我在修改的时候,同学们不能读 ~~

也可以称为“给写操作加锁”

2)不可重复读

此时,有三个事务,ABC.
首先,事务A执行一个修改操作.A执行完毕的时候,提交数据.
接下来事务B执行,事务B读取刚才A提交的数据 ......
在B读取的过程中,又来了一个事务C,C又对刚才A修改的数据
再次做出了修改.
此时对于B来说,后续再读取这个数据,读到的结果就和第一次读到的结果是不一样的.

这个过程就叫做“不可重复读”

体现的是 事务B,一个事务多次读取的结果不一样

如果是有多个事务,每个事务读到的数据不一样这种情况认为是正常 ~~

解决措施

个事务在读取数据的过程中,其他的事务不能修改它正在读的数据…

读操作加锁.

3)幻读

有一个事务A在读取数据.

读的过程中,另外一个事务B,
新增了/删除了一些其他的数据 ....

此时站在A的视角,多次读取的数据内容虽然一样,但是“结果集”不同

结果集不同,是否算是问题,视情形而定 ~~

解决措施:

只要有同学读代码,我就不要做任何操作,这样的操作称为“串行化”

比如多个客户端,同时提交了多个事务过来
但是服务器一个一个的执行事务(执行完第一个事务,在执行第二个,再执行第三个 ..... )

5所产生问题与隔离性的关系 

隔离性:事务之间的相互影响变小了得到的数据更准了 

在mysql中提供了 四个 隔离级别.可以通过配置文件来设置当前服务器的隔离级别是哪个级别.
设置不同的隔离级别,就会使事务之间的并发执行的影响产生不同的差别,从而会影响到上述的三个问题的情况 ~~

1)read uncommitted 读未提交.


这种情况下,一个事务可以读取另一个事务未提交的数据.
此时,就可能会产生 脏读,不可重复读,幻读 三种问题 ....
但是此时,多个事务并发执行程度是最高的,执行速度也是最快的.

2)read committed 读已提交


这种情况下,一个事务只能读取另一个事务提交之后的数据(给写操作加锁了)
此时,可能会产生不可重复读,幻读问题(脏读问题解决了)
此时,并发程度会降低,执行速度会变慢,同时也称为,事务之间的隔离性提高了.

3)repeatable read 可重复读

这个情况下,相当于是给 写操作 和 读操作 都加锁了.
此时,可能产生幻读问题,解决了脏读和不可重复读问题.

为什么能防止幻读?

幻读是指在一个事务中,两次读取相同的查询条件时,结果集的行数发生了变化。在可重复读隔离级别下,虽然已存在的行是锁定的,但新插入的行可能仍会导致幻读。

并发程度进一步降低,执行速度进一步变慢,事务之间的隔离性,进一步提高了.

4)serializable 串行化


此时,所有的事务都是在服务器上一个接一个的执行的.
此时,解决了脏读,不可重复读,幻读问题.

并发程度最低,执行速度最慢,隔离性最高,数据最准确 ~~


如果您觉得有失偏颇请您在评论区指正,如果您觉得不错的话留个好评再走吧!!

您的鼓励就是对我最大的支持!  ! !

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

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

相关文章

HarmonyOS开发实战( Beta5版)合理使用动画丢帧规范实践

本文列举了部分用于优化动画时延的正反案例,帮助开发者在遇到相似场景时进行优化,解决构建页面动画时遇到动画时延较长的问题。 减少动画丢帧 在播放动画或者生成动画时,画面产生停滞而导致帧率过低的现象,称为动画丢帧。 播放…

《Learning To Count Everything》CVPR2021

摘要 论文提出了一种新的方法来解决视觉计数问题,即在给定类别中仅有少量标注实例的情况下,对任何类别的对象进行计数。将计数问题视为一个少样本回归任务,并提出了一种新颖的方法,该方法通过查询图像和查询图像中的少量示例对象…

【Linux高级命令】2_查看日志命令(重点)

文章目录 一、查看日志文件1.1 日志文件1.2 查看日志信息:head1.3 查看日志信息: tail【重点】1.4 工作中的使用场景 二、查看操作系统信息 一、查看日志文件 1.1 日志文件 就是一个文本文件 里面记录了程序运行的信息 作用 通过最后几行信息&#xff…

JIT编译:Java性能加速的关键技术

JIT(Just-In-Time)编译是 Java 虚拟机(JVM)中一种重要的优化技术,用来在程序运行时动态地将字节码编译成机器码(也就是平台特定的原生代码),从而提高程序的执行效率。 以下是 JIT 编…

领衔登榜!凯伦股份入选2024年度市级工业设计中心名单

近日,由苏州市工信局认定的2024年度市级工业设计中心名单正式完成了公示,江苏凯伦建材股份有限公司领衔登榜。 据了解,工业设计是指以工业产品为主要对象,综合运用科技手段和工学、美学、心理学、经济学等知识,对产品的…

2024.9.5 作业

注释QT基础代码 QT core gui#如果Qt版本大于4,则添加widgets模块 greaterThan(QT_MAJOR_VERSION, 4): QT widgets#启用C11编译标准 CONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been mark…

【机器学习】自然语言处理中的Transformer模型:深度解析与前沿发展

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言Transformer模型概述编码器(Encoder)与解码器(Decoder) 自注意力机制与多头注意力自注意力机制多头注意力机制 位置编码与模型优势位置编码模型优势…

MySQL数据库的基本概念(day23)

1 学习目标 了解数据库相关的概念了解并掌握MySQL产品的安装了解并掌握MySQL服务的使用重点掌握MySQL语法规范重点掌握数据库的管理语法重点掌握数据表的管理语法 2 数据库概述 2.1 数据库相关概念 2.1.1 什么是数据库 数据库的英文为DataBase,简称DB&#xff…

linux基础IO——动静态库——实现与应用学习、原理深入详解

前言:本节内容是基础IO部分的动静态库。 本节内容, 我们将站在实现者的角度上自己实现一下动静态库, 并且会站在使用者的角度上使用我们自己实现的库。过程中牵扯到许多新的知识, 最后我们会重谈一下我们的进程。 理解一下有了动静…

如何开发潜在客户

本文将介绍发掘潜在客户的关键步骤,其中利用企搜客大数据拓客,是相对高效的工具模式,快速开发潜在客户拓展业务。 一、潜在客户开发的重要性 潜在客户开发是企业营销中至关重要的一环。通过精准的目标客户定位和有效的开发策略,企…

J.U.C Review - CopyOnWrite容器

文章目录 什么是CopyOnWrite容器CopyOnWriteArrayList优点缺点源码示例 仿写:CopyOnWriteMap的实现注意事项 什么是CopyOnWrite容器 CopyOnWrite容器是一种实现了写时复制(Copy-On-Write,COW)机制的并发容器。在并发场景中&#…

2024年高教社杯数学建模国赛E题解题思路

E 题 交通流量管控 问题背景 随着城市化进程的加快、机动车的快速普及,以及人们活动范围的不断扩大,城市道路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经济发展和百姓幸福感的一个“痛点”&a…

SpringDataJPA系列(6)Entiry注解使用

SpringDataJPA系列(6)Entiry注解使用 JPA协议规定 实体是直接进行数据库持久化操作的领域对象,必须通过 Entity 注解进行标示实体必须有一个 public 或者 protected 的无参数构造方法实体里面必须要有一个主键,主键标示的字段可以是单个字段&#xff0…

《机器学习》—— PCA降维

文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍 PCA(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系…

持久化分析

目录 介绍步骤WMI持久化分析注册表映像劫持IFEO持久化 介绍 1、WMI 的全称是 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之后随着时间的推移而过时,它作为一项功能…

Linux【6】系统

时间日期 date日期 cal——当月日历 cal -y 今年的日历 磁盘占用df du df 剩余空间 du 目录下的文件大小 进程ps ps aux a——其他用户 u——详细状态 x——没有控制终端 只看CPU占用高的进程top kill pid代号 ——杀死程序 通配符(简略版) …

每日OJ_牛客_解读密码(简单模拟)

目录 牛客_解读密码(简单模拟) 解析代码 牛客_解读密码(简单模拟) 解读密码__牛客网 解析代码 题目意思:给定字符串中包含其他符合一级数字,将字符串中数字解析出来。 解析步骤: 题目明确…

LabVIEW声发射数据采集系统开发

声发射(Acoustic Emission, AE)技术是材料检测中的一种无损检测方法,广泛用于结构健康监测。本文将介绍一个基于LabVIEW的声发射数据采集系统的真实案例,涵盖工作原理、开发流程、硬件选型、注意事项及难点。该系统通过LabVIEW平台…

LlamaIndex 使用 RouterOutputAgentWorkflow

LlamaIndex 中提供了一个 RouterOutputAgentWorkflow 功能,可以集成多个 QueryTool,根据用户的输入判断使用那个 QueryEngine,在做查询的时候,可以从不同的数据源进行查询,例如确定的数据从数据库查询,如果…

2024年装电脑,就认准这几个型号,能避坑!

前言 小伙伴是否都会觉得,自己又不懂电脑,跑电脑城去装机又怕被坑。这时候只能找熟人给装机,至少……熟人应该不会坑自己吧?! 这不,小白电脑技术的抖音评论区上就有这么一条评论: 这哥们找一熟…