【MySQL事务】保证数据完整性的利器

news2024/11/25 23:46:55

1、事务的认识

事务:事务就是将多个SQL给打包在一起,组成一个整体。组成这个整体的各个SQL,要么全部成功,要么全部失败。

举例说明:

情人节到了,滑稽老铁打算给他女朋友小美发给红包,但是他又害怕小美不收,于是他想到了一个办法就是通过银行卡进行转账。他给小美转账了 520 元,那么滑稽老铁的银行卡余额就得 -520 元,小美的银行卡余额 +520 元。这些操作就组成一个整体,就变成了事务,要么执行,要么就一个都不执行。

如果中间出错了,就一条都不执行。这里的一条都不执行,并不是真的一条都不执行,而是自动的恢复成执行之前的样子了,看起来就好像一个都没有执行一样,这个操作就称为“回滚(rollback)”。

回滚:回滚就是把执行过的操作逆向恢复回去,就像电脑上的 ctrl + z 操作

数据库会把执行的每个操作都记录下来,如果某个操作出错了,就会把事务中前面的操作进行回滚,然后根据之前进行的操作,进行逆操作

这些操作是会有很大开销的,可以保存但不能无限保存,最多就是把正在执行的事务保存下来,额外的东西不好再保存了

2、事务的特性

2.1事务的四大特性

  • 原子性:打包成整体这个操作,就称为“原子性”,这个是事务最核心的特性

举例说明:滑稽老铁给小美转账 520 元,此时滑稽老铁余额 - 520 元,小美余额 +520,此时把转账、滑稽老铁余额 - 520 元,小美余额 +520元 打包成一个整体,要么都执行,要么一个都不执行,这就具有了原子性。

  • 一致性:事务执行前/执行后,都得是数据合法的状态

举例说明:滑稽老铁给小美转账520元,如果转账成功滑稽老铁余额-520元,小美余额+520元。如果转账失败滑稽老铁余额不扣钱,小美余额也不加钱。

注:一致性是根据原子性而来的,要么全部执行,要么都不执行

  • 持久性:事务产生的修改,都会写入硬盘

举例说明:滑稽老铁给小美转账 520 元,转账成功滑稽老铁余额-520元,小美余额+520元,这个是持久的,不会改变的。

  • 隔离性:一个数据库服务器,同时执行多个事务的时候,事务之间的“相互影响程度”

举例说明:当多个事务同时执行的时候,一个事务的执行是否会干扰到其他事务,这就是事务的隔离性

2.2 隔离性的重点说明

MySQL 服务器,是要同时给多个客户端提供服务,此时多个客户端之间就可能会同时发生事务,尤其是这多个事务在操作同一个数据库的同一个表的时候,就可能引起一些麻烦

  • 如果隔离性越高,也就意味着事务之间的并发程度越低,执行效率越慢,但数据的准确性越高

  • 如果隔离性越低,也就意味着事务之间的并发程度越高,执行效率越快,但数据的准确性越低

2.3 事务同时执行会出现的问题

2.3.1 脏读

脏读:当事务A在写数据的时候,事务B读取事务A写的数据,事务B 读完后,事务A改了数据,那么此刻事务B读到的数据就是错误的数据,这就称为“脏读”问题。

举例说明:张三和李四是同桌,有一次老师布置课堂作业的时候,李四第二题不会写,于是李四就偷偷的看了一眼张三写的,看到张三第二题选了A,

在这个场景下,滑稽老铁和小美这两个事务是完全并发的没有任何限制,在这个前提下就会出现脏读问题

问题:如何解决脏读问题?

答:解决脏读问题就是降低并发性、提高隔离性,可以给这里的 "写操作" 进行加锁

加锁:当进行了写加锁,滑稽老铁在制定表白计划表的期间,别人就不能同时去读了。相当于降低了并发程度,提高了隔离性,降低了一定的效率,但是提高了准备性

2.3.1 脏读

脏读:当事务A在写数据的时候,事务B读取事务A写的数据,事务B 读完后,事务A改了数据,那么此刻事务B读到的数据就是错误的数据,这就称为“脏读”问题。

举例说明:张三在写作业,作业内容 123+32 = 15.. 当张三写完 15 之后,李四跑过来瞄了一眼张三的答案:123+32=15,于是李四就把这个答案抄到自己的作业本上了,但是实际上张三要写的是 123+32 = 155,但是李四读到了一个张三还没写完的答案,也就导致李四读到了一个错误的数据,这就是脏读问题

如何解决脏读问题呢?

答:降低并发性、提高隔离性,也就是给“写操作”加锁

加锁可以分为:写加锁和读加锁

写加锁:写的时候,别人不能进行读

读加锁:读的时候,别人不能进行写

2.3.2 不可重复读

不可重复读:事务B 在读的时候,事务A改了数据,此刻事务B连续两次读到的数据结果不一样

举例说明:张三在写作业的时候,发生李四一直在瞄。张三感觉李四有点影响到他了,于是就跟李四约定,等张三写完了再给李四瞄。过了一会张三写完了,李四就开始瞄了,当李四正在瞄的时候,张三发现自己有个地方错了,就李四等一会再瞄,自己先改一下,这就导致李四之前瞄到的数据和现在瞄到的数据可能不一样

如何解决不可重复读呢?

答:给读加锁,让李四读的时候,张三不能修改。

这两个事务之间的并发程度进一步降低了,隔离性又进一步提高了,运算速度又进一步变慢了,数据的准确性又进一步提高了

2.3.3 幻读

幻读:事务A写的时候,事务B不能读;事务B读的时候,事务A不能写。虽然事务A不能写,但是事务A可以新增和删除一个其他的文件,此刻事务B 两次读到的结果集就不同了

李四正在瞄的时候,张三让他等一下在喵,自己先改一下。李四感觉自己正在瞄的时候,张三总是打断自己,于是就跟张三商量说,你写的时候我不去瞄,我瞄的时候你也不能让我等一下你去改。于是张三就跟李四约定好了,张三写的时候李四不能读,李四读的时候张三不能写。李四在瞄的时候,张三没事干,张三就看哪里写错了,发现写错了自己又不能在李四读的时候去改,然后就把正确答案写到另一种本子上,写完后把正确答案在拿出来,李四一看怎么又多了本子,这就是幻读问题

如何解决幻读问题?

答:串行化,彻底的舍弃并发。就是当事务B读的时候,事务A什么都不能干

3、MySQL提供的隔离级别

MySQL 为了解决并发执行带来的问题,提供了四个隔离级别

  • read uncommitted:不做任何限制,事务之间都是随意并发执行的。并发程度最高,隔离性最低。会产生: 脏读+不可重复读+幻读

  • read committed:对写操作加锁,并发程度降低了,隔离性提高了。解决了脏读问题,但仍然存在:不可重复读+幻读

  • repeatable read:对写和读都加锁了,并发程度又降低了,隔离性又提高了。解决了脏读和不可重复读问题,但可能存在:幻读

  • serializable:严格串行化,并发程度最低,隔离性最高。解决了脏读+不可重复读+幻读问题,但执行速度最慢

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

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

相关文章

msvcp140.dll重新安装的解决方法(一键安装方法)

msvcp140.dll电脑文件中的dll文件,即动态链接库文件,若计算机中丢失了某个dll文件,就会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错,其安装方法:1、打开浏览器输入“【dll修复程序…

[Diffusion] Speed is all your need

论文简要总结 刚读了下speed is all you need这个论文, https://arxiv.org/pdf/2304.11267.pdf 只是用的SD1.4没有对网络进行改造。 只做了4个改动 1 是对norm采用了groupnorm (GPU shader加速) 2 采用了GELU (GPU shader加速) 3 采用了两种attention优化,是partiti…

一个简单的MCU内存管理模块(附源码)

现在非常多的的MCU性能都还不错,同时用户也会去扩展一些外部RAM,那么如何高效便捷的管理这些内存是一个重要话题。 今天给大家分享一份源码:基于无操作系统的STM32单片机开发,功能强大,可申请到地址空间连续的不同大小…

如何应对公民开发者的挑战?低代码流程自动化助你打造高效系统

如今,企业越来越倾向于采用公民开发作为提升流程自动化和数字化转型的手段。这种方法让非程序员(如客户和员工),有机会为特定任务创建自己的应用程序。它还使公司能够快速调整以适应客户偏好或业务需求。 尽管这种方法有很多好处&…

Prometheus+Grafana普罗米修斯搭建+监控MySQL

PrometheusGrafana普罗米修斯搭建监控MySQL 一,Prometheus 1.什么是Prometheus? ​ Prometheus 是 Cloud Native Computing Foundation 的一个监控系统项目, 集采集、监控、报警等特点于一体。 ​ Prometheus主要受启发于Google的Brogmon监控系统&…

数字化转型浪潮下,汽车零部件企业如何逐鹿突围?

一、汽车行业当下趋势 数据来源:汽车工业协会 1.乘用车及新能源车市场:2023年1-4月,乘用车销量同比增长6.8%,新能源车销量同比增长35.8%。 2.行业趋势:汽车行业生存压力大,4月中国汽车经销商库存系数下降…

中国科学院稀土研究院-PLC采集项目案例

1.项目背景 中国科学院稀土研究院(江西稀土研究院)隶属中国科学院。 作为中国国内唯一专注于稀土科技创新的国立科研机构,中国科学院稀土研究院将面向国家战略和产业发展重大需求,围绕稀土绿色、高效、均衡、高值化利用的核心科学…

【Spring MVC】没有Spring MVC,Spring Boot表现得毫无用处? ? ?走进Spring MVC,学习热部署自动运行程序 ! ! !

前言: 大家好,我是良辰丫,从今天开始,我们就要进入Spring MVC的学习了,前面的文章中我们的很多注解都没有讲解,是不是看的脑瓜嗡嗡的,哈哈,没关系,在我们Spring MVC中我们就要详细讲解那些注解了,请跟随良辰的脚步,gogogo! ! !💌💌💌 &#x…

希望之星、黄昏之星、三只乌鸦……怎么用 DolphinDB 快速计算 K 线?

K 线技术分析是股票投资中很常用的一种分析方法,主要通过历史价格图表中的数据来预测未来市场趋势。一根 K 线包括四个价格:开盘价、收盘价、最高价和最低价,通常简称为 OHLC。K 线按照周期一般可以分为日、周、月、年,以及五分钟…

Selenium自动化落地实践

01、自动化测试流程图 02、主要过程描述 1、自动化测试的切入点 开展自动化测试的时间点很关键,需要在系统已经过多版本的系统测试,达到稳定之后。 2、可行性分析 在进行项目自动化测试之前,第一步就是要确认其可行性,是否可以…

为何唐宋诗词鼎盛,而到了明清变成了小说

我国是一个历史悠久的国家,在漫长的历史长河中,随着朝代的更替,很多事也发生了有趣的变化。 例如唐宋时期盛行的是诗词,而到了明清时代,小说又开始盛行了起来,那么造成这种文风改变的原因是什么呢&#xf…

2023安博会进行时!英码科技1个重磅+4大看点隆重亮相

2023年6月7日,第十六届(2023)中国国际社会公共安全产品博览会(以下简称:安博会)在北京首钢会展中心盛大开幕!本届安博会以“自主创新数智融合”为主题,共设置了7大主题展馆&#xff…

linux开发:Linux下查看端口占用

前段时间有学生问到,怎么查看已经被占用的端口?下面我就统一给大家解释一下。 提到端口,那首先来回顾端口定义,为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理,使用端口号来区别;我们知道TCP…

【活动预告】ACDU 中国行 · 深圳站精彩抢先看

近期活动 在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一。 随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用。 数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效、更智…

Java-API简析_java.lang.Float类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131129886 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

JMeter测试笔记(五):JDBC请求

引言: 进行性能测试时,我们有时需要模拟数据库的访问和操作,而JMeter中的JDBC请求可以帮助我们实现这个目的。 在本文中,我们将深入了解JDBC请求的使用方式,并学习如何正确配置它们来模拟对数据库的访问和操作。 如…

Excel函数VLOOKUP常用方法

一、基础用法 1、精确匹配 公式:VLOOKUP(待匹配值,查找范围,范围列数,查找方式) 定义好要输出表的表头和第一列,第一列即为要查找和匹配的父内容,在第二列输入公式,被查找表中一定也要将待查…

【大数据学习番外篇之爬虫2】爬虫入门简单例子

目录 1. 图片爬取 2. 破解百度翻译 3. 豆瓣电影爬取 4. 肯德基餐厅位置爬取 1. 图片爬取 通过以下代码我们可以看到图片已经爬取进入虚拟机里面。 # -*- coding: utf-8 -*- import re import requests from urllib import error from bs4 import BeautifulSoup import os…

Fmoc固相肽:116783-35-8,Fmoc-Thr(Ac3GalNAcα)-OH,进行总结说明

试剂基团反应特点(Reagent group reaction characteristics): Fmoc-Thr(Ac3GalNAcα)-OH,该构建块中的O-糖苷键和O-乙酰基保护对哌啶和TFA[1]都是稳定的,使其与Fmoc固相肽合成中的标准方案完全兼容。乙酰基保护基的去除…

了解set

了解set 1. set的介绍2. set的使用1. Member functions2.set的迭代器3. set的容量4.set修改操作4.1 insert4.2 erase、swap和clear4.3 emplace 5. observers(了解)6.Operations(了解) 3.set有关的题目 1. set的介绍 C中的set是一种关联式容器,它能够存储同一数据类型…