【MySQL】事务是什么?事务的特性又是什么?

文章目录

  • ✍事务是什么?
  • ✍事务的特性(四个)
  • ✍事务并发时出现的问题
  • ✍事务的隔离性

✍事务是什么?

事务是由一个或多个SQL语句构成的,在事务中,这些的SQL不可分割,是一个整体,整个事务类似于物理中的原子结构,不可再分。

简单概括,就是说,将多个语句给打包成一个整体了,在这个整体中的语句,要么一条都不执行,要么全部执行,不存在部分执行或者部分不执行的情况。

这样的定义,有效的避免了部分执行,部分未执行而产生的一些“中间状态·”引起的问题

举例来说:在转账系统中,支付者支付金钱和接收者接收金钱就是一个“事务”,他们两者只会同时执行或同时不执行,不会存在支付者支付金钱后,接收者没有接收到金钱这样的情况。

注意:全部不执行
这里的全部不执行,并非字面的一个语句都不执行,在进行操作时,SQL语句会一条一条的执行,当数据库遇到一些特殊情况时(例如:程序崩溃,主机断电,系统崩溃,网络断开…),数据库会将先前执行的SQL语句给一句一句恢复回去,这里的操作叫做“回滚”,使程序恢复如初,看起来就好像是一句都没有执行

回滚
为什么能实现回滚操作呢?是因为数据库在事务时,会记录日志(写入到硬盘)当事务执行完后,并没有差错,就会删除掉。

如果过程中出现了问题,就会根据日志来进行处理

  • 之前进行过新增操作,就会把数据删除
  • 之前进行过更改数据,就会恢复数据
  • 之前进行过删除操作,就会新增删除的数据
  • 之前进行过查询操作,没有影响,不会做出操作

✍事务的特性(四个)

  • 原子性 :指事务不可再分的最小单位。事务中的操作只有全部发生和全部不发生这两种情况。
  • 一致性:指事务执行之前和执行之后,数据是一致的。
    例如转账时,A转给B,500元,那么A的账户就会少500,B的账户就会多500.
  • 持久性:执行事务对数据的修改存放于硬盘上,会在硬盘上持久存在,下次程序重启,机器重启对数据的修改还是存在的。
  • 隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    会”加锁“,防止脏读情况的发生,从而提高了并发处理的准确性。
    “写加锁”,写的时候,不能读取数据。

✍事务并发时出现的问题

1.脏读
当事务A在对数据进行修改时,事务A等待一段时间,此时在等待过程中,事务B记录下了A对数据修改的结果,等待时间过后,事务A继续修改,此时事务B误将这次的结果作为最终结果记录下来。
这就是脏读。

2.不可重复读
存在三个事务ABC。
事务A对数据进行修改,接下来事务B进行读取数据(事务B的多个SQL都要进行读操作),在执B的过程中,又有一个事务C对数据进行了修改。

就会使B里面的不同读操作,读出来的结果不一样。
在这里插入图片描述

所以再进一步规定。进一步加锁–读加锁

3.幻读

事务A先修改并提交数据。事务B进行读取数据。此时事务C没有修改事务B读取的数据,但是给对应的表进行了新增数据/删除数据等操作…导致事务B读到的数据集不同(已有的数据是一致的,只是数据的条数增加/减少),可以视为是“不可重复读”的特殊情况。

解决幻读:
所以的事务,“串行化”使事务严格按照一个接一个进行执行,此时完全没有并发了,执行的效率最低,同时事务的隔离性最高。

总结:

  1. 脏读–写加锁
  2. 不可重复读–读加锁
  3. 幻读–串行化

在解决实际问题中,要想要保证数据的准确性,就需要牺牲一些效率。具体跟业务场景所定。

✍事务的隔离性

MySQL提供了四个隔离级别。

  1. read uncommitted允许读取其他事务未提交的数据 -->
    存在: 脏读+不可重复读+幻读 。
    并发程度最高,隔离性最低.
  2. read committed:只能读取其他事务提交后的数据 -->
    解决了脏读,存在不可重复读,幻读。
    并发程度降低,隔离性提高。
  3. repeatable read:针对读操作和写操作都加了锁 -->
    解决了脏读+不可重复读,存在幻读。
    并发程度又降低,隔离性又提高。
  4. 串行化(serializable):所有的事务都是串行执行的–>
    解决了脏读+不可重复读+幻读。
    并发基本没有,隔离性最高

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞

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

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

相关文章

牛客NC30 缺失的第一个正整数【simple map Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可…

web前端之罗盘时钟、不一样的补零方式、LED字体、padStart

MENU 效果图htmlJavaScriptstyle 效果图 html <div class"clock"><div class"second-box"></div><div class"minute-box"></div><div class"hour-box"></div><div class"day-box&…

HarmonyOS 应用开发之Stage模型启动FA模型PageAbility

本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。 UIAbility启动PageAbility UIAbility启动PageAbility和UIAbility启动UIAbility的方式完全相同。 说明&#xff1a; 需注意FA模型中abilityName由bundleName AbilityName组成&#xff0c;具体见示例。 i…

蓝桥杯第十三届电子类单片机组程序设计

目录 前言 单片机资源数据包_2023 一、第十三届比赛省赛 1.比赛题目 2.赛题解读 二、部分功能实现 1.继电器的开启与关闭 2.长按切换显示状态功能的实现 3.对于温度传感器小数部分的处理 4.其他处理 1&#xff09;关于数码管显示小数的处理 2&#xff09;关于5s后继…

vue3+ts+elementplus写一个登录页面教程

文章目录 前言1. 安装 Vue CLI 和 TypeScript 支持2. 创建登录组件 文章重点内容 前言 前期准备步骤&#xff1a; 创建一个使用 Vue 3 和 TypeScript 的登录页面涉及到多个步骤。以下是一个基本的教程&#xff0c;帮助你从头开始构建这样一个页面&#xff1a; 1. 安装 Vue CL…

Ollama部署在线ai聊天

概述&#xff1a;虽然ollama在Windows方面还有很多bug&#xff0c;但不妨碍它在ai领域上面的成就 第一步&#xff1a;安装Ollama 官网&#xff1a;Download Ollama on Windows 下载安装即可。说明一下ollama的安装位置只能是c盘&#xff0c;好像改不了&#xff0c;但是数据模…

算法学习——LeetCode力扣动态规划篇8

算法学习——LeetCode力扣动态规划篇8 300. 最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删…

FA模型切换Stage模型之module的切换

从FA模型切换到Stage模型时&#xff0c;开发者需要将config.json文件module标签下的配置迁移到module.json5配置文件module标签下&#xff0c;具体差异见下列表格。 表1 FA模型module标签与Stage模型module标签差异对比 表2 FA模型metaData和Stage中metadata对比 表3 FA模型me…

【UI框架】——保姆式使用教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

深度学习500问——Chapter05: 卷积神经网络(CNN)(2)

文章目录 5.6 有哪些池化方法 5.7 1x1卷积作用 5.8 卷积层和池化层有什么区别 5.9 卷积核是否一定越大越好 5.10 每层卷积是否只能用一种尺寸的卷积核 5.11 怎样才能减少卷积层参数量 5.12 在进行卷积操作时&#xff0c;必须同时考虑通道和区域吗 5.13 采用宽卷积的好处有什么 …

多线程JUC 第2季 synchornized和Lock锁(重入,公平)

一 锁 1.1 锁的介绍 synchronized&#xff0c;和lock锁都是一种悲观锁。悲观锁适用于写多场景&#xff0c;乐观锁适用于读多场景&#xff0c;实现策略有&#xff1a;版本号和cas自旋算法。 1.2 类锁和对象锁的使用场景 1.3 任何对象都有一把锁 之所以任何一个对象都有把锁…

html第二次作业

骨架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initi…

PyTorch深度学习快速入门(小土堆)

文章目录 16. 神经网络的基本骨架17.卷积操作18.卷积层 16. 神经网络的基本骨架 forward: import torch from torch import nnclass Tudui(nn.Module):def __init__(self):super().__init__()def forward(self,input):outputinput1return output#创建Tudui的实例对象 tuduiTu…

Django详细教程(二) - 部门用户管理案例

文章目录 前言一、新建项目二、新建app三、设计表结构四、新建数据库五、新建静态文件六、部门管理1.部门展示2.部门添加3.部门删除4.部门编辑 七、模板继承八、用户管理1.辨析三种方法方法一&#xff1a;原始方法方法二&#xff1a;Form组件(简便)方法三&#xff1a;ModelForm…

ARM-按键中断实验

代码 #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//获取要处理的中断的中断号unsigned int irqnoGICC->IAR&0x3ff;switch (irqno){case 99:pr…

前端工程师————HTML5学习

HTML5基础 开发工具很多&#xff0c;其中Hbulider较好用&#xff0c;下载网址如下&#xff1a; DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 html表示整个页面 head表示搜素框 body表示内容 ti…

【蓝桥杯】矩阵快速幂

一.快速幂概述 1.引例 1&#xff09;题目描述&#xff1a; 求A^B的最后三位数表示的整数&#xff0c;A^B表示&#xff1a;A的B次方。 2&#xff09;思路&#xff1a; 一般的思路是&#xff1a;求出A的B次幂&#xff0c;再取结果的最后三位数。但是由于计算机能够表示的数字…

Gromacs模拟一:配体-双链蛋白质复合物体系准备

1、蛋白质的准备&#xff1a; 在RCSB网站下载想要的蛋白晶体&#xff08;教程里是3htb&#xff09;&#xff0c;用notepad等编辑器或是分子可视化软件除去里面的非蛋白分子或离子。 这里采用的是一个经过分子对接后的蛋白质pdb和配体小分子的pdb。 教程里提到的配体是2-丙基…

java算法day39 | 动态规划part02 ● 62.不同路径 ● 63. 不同路径 II

62.不同路径 思路&#xff1a; 本题非常巧妙。 第一步&#xff1a;定义一个dp数组存储到达每个位置的路径数。 第二步&#xff1a;每个位置的路径数它左面位置的路径数上面位置的路径数。 第三步&#xff1a;不好想的是如何初始化数组。 既然只能向下或向右走&#xff0c;可推出…

网络七层模型之会话层:理解网络通信的架构(五)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…