数据库——事务
事务是指作为一个整体被执行的一系列操作。在数据库管理系统中,事务是指一组数据库操作(如插入、更新、删除等)的逻辑单元,也就是说事务的本质是把多个操作打包成一个操作,并且它要么完全执行,要么完全不执行,而且它的完全不执行并不是真正的完全不执行,而是如果在某个操作的过程出现错误,就会将前面的操作全部回退(也称回滚),使之回到还没开始执行的状态。那么回滚是如何使它返回到未执行的状态呢?其实只是把事务中执行的每个操作都记录(通过特定的日志,记录数据库事务操作的中间过程)下来,如果需要回滚,只需按照之前的操作的逆操作来执行就行,例如前面的操作是插入数据,它的逆操作就是删除数据。它还具有以下4个特性:
1)原子性:事务被视为一个不可分割的最小单位,要么全部执行成功,要么全部回滚到最初状态。回滚保证事务的原子性,而回滚则是通过特定的日志来保证。start transaction是事务的开始,接下来的sql语句就将是事务的操作,commit(提交事务)或 rollback(手动触发回滚)是事务的结尾,commit是全部成功,rollback是全部失败。一个事务务必要以这两个中的一个操作进行结尾。如果没有这两操作,接下来的sql语句都会被认为是这个事务的一部分。
2)一致性:事务执行前后,数据库从一个一致的状态转换到另一个一致的状态。事务执行过程中可能会破坏一致性,但在事务结束时必须保证恢复到一致的状态。也就是事务执行前后,数据能够对的上(例如转账,一个增,一个减,并且结果相同)。通过约束和回滚来保证事务的一致性。
3)持久性:一旦事务提交成功,其所做的修改将永久保存在数据库中,即使系统发生故障也不会丢失。
4)隔离性:并发执行的事务之间应该相互隔离,每个事务都感觉不到其他事务的存在,以避免数据不一致或读取脏数据,并且隔离性越低,效率将会增加,数据也就越不可靠,隔离性越高,效率也就减低,数据也就越可靠。例如:
有着客户端1和客户端2,它们同时操作一个表,客户端1对表格进行查询,如果大于100,就对它进行判定,而客户端2对该表格进行加200,它们同时将事务提交给MySQL数据库,那么就会发生以下情况,先进行查询,后进行加200,然后得出判断,或者先进行加200,然后查询,在判断,这样就出现两种结果,那么这两种结果那个是可靠的呢?并且为什么会出现这种情况呢?可不可靠根据情况来看,但出现这个原因还是因为虽然这两个事务是同时提交的,但处理事务总是会有一个时间差,哪怕它在小,这就导致会出现这种情况,这就会出现错误,因为得到的结果是随机的,有的时候这个结果是正确的,但有时又是错误的。
例子1:当老师正在批改试卷,一个同学过来看,发现他是100分,然后就走了,但老师在批改过程中,发现改错了,然后就改回来,这个同学就得到了临时的分数,不是最终的分数,等到试卷发下来后,就发现怎么与之前看到的分数不同。而这种临时的分数,也可以说是临时的数据就称为脏数据,读取临时的数据就称为脏读。那么如何解决脏读的问题呢?很简单,那就是给写操作(改试卷)加锁,写的时候不让其他人读(看分数),写完之后才让读取,这样读取的数据就是最终的数据,这就解决了脏读的问题,引入写加锁后,就提高了两个事务(一个改试卷,一个看试卷)的隔离性,减低了两个事务的并发性,降低了效率,却提高了数据的准确性。这个问题解决后,
例子2:第二个问题又出现了,这时老师与同学们说,在我改完之后,你们不许看后,等老师改完后,同学们跑去看试卷,老师突然想到又改错了,有跑回去改了,因为只约定了改时不能看,没约定看时不能改,因此老师便在同学们看时就去修改,边看边上交,然后同学们发现,怎么看着看着分数就变了呢?那么学生就会怀疑老师的水平,这种情况肯定是非常不好的。这种问题就被称为不可重复读(在同一个读取数据的事务中,可能会涉及到多次读操作,但多个读操作得到的数据不一样)。解决这个问题就很简单,只需要再给读操作加锁就行。这样就会导致别人读到的数据就不会改变,等老师再去修改时,就不能上交结果,必须等同学读完才能上交修改结果,等同学再次去读时,就会读到修改后的数据,也就是之前同学读的是旧数据,现在同学读的是新数据。这个旧数据可不是脏数据,因为它之间可能隔了许多过程,可以认为是两个版本的数据,一个是新版本的数据,一个是旧版本的数据,就跟游戏角色增强或削弱类似。这样并发程度又进一步降低了,隔离性又提高了,效率又降低了,数据又更可靠了。
例子3:这时第三个问题了,这时老师和同学们约定,改时不能看,读时不能改,但是因为同学们时看试卷时,老师觉得闲着也是闲着,就去帮别的老师批改试卷,并将这份试卷放在同一个位置,这时同学们就会发现怎么每次读时,都会多出几份新的试卷,这就会让同学觉得自己可能脑子不好,怎么每次都会少读取几份试卷。这种情况就称为幻读(一个数据再多出读操作过程中,虽然每次读的数据的值是相同的,但结果集不同,也就是会多出一个或几个)。既然读的时候不让老师改试卷,那么老师就再去改别班的试卷,这就导致每次读的时候会多出几分试卷。可以看出,幻读是不可重复读的特殊情况。那么如何解决幻读呢?办法只有一个,那就是彻底放弃并发执行事务,将执行事务串行化,所有事务都是一个挨着一个,不会出现在读的过程中,再去写别的或这个的情况,也就是流水线,必须先做完前一个,才能进行下一个,不能再等前一个的过程中做别的事情。而这个的并发性是最低的,隔离性是最高的,效率最低的,数据最可靠的。
总结,在并发执行事务的过程中,可能会发生以下问题
1)脏读:读到了写数据之前的中间数据(脏数据)
2)不可重复读:在同一个读取数据的事务中,可能会涉及到多次读操作,但多个读操作得到的数据不一样
3)幻读:一个数据再多出读操作过程中,虽然每次读的数据的值是相同的,但结果集不同,也就是会多出来一个或几个
对于这种情况,MySQL提供了4种事务的隔离级别
1)read uncommitted:允许读未提交的数据。(脏读,不可重复读,幻读的问题仍然存在,并发程度最高,效率最高,隔离性最低,数据可靠性最低)
2)read committed:允许读已提交的数据。(给写操作加锁,解决了脏读的问题,但不可重复读,幻读的问题仍然存在,并发程度降低,效率降低,隔离性增加,数据可靠性增高)
3)repeatable read:可以重复读取数据(给写操作和读操作加锁,解决了脏读,不可重复读的问题,但幻读的问题仍然存在,并发程度再次降低,效率再次降低,隔离性再次增加,数据可靠性再次增高)
4)serializable:事务彻底的串行执行,(脏读,不可重复读,幻读的问题,并发程度最低,效率最低,隔离性最高,数据可靠性最高)
所以可以根据需求来选择使用那个隔离级别,大部分情况下,使用默认隔离级别就能够解决,而repeatable read就是默认级别。
相关文章:
数据库——事务
事务是指作为一个整体被执行的一系列操作。在数据库管理系统中,事务是指一组数据库操作(如插入、更新、删除等)的逻辑单元,也就是说事务的本质是把多个操作打包成一个操作,并且它要么完全执行,要么完全不执…...

echarts折线图每段显示不同的颜色
效果图 配置项: zqChartFour: {title: {text: "一天用电量分布",subtext: "纯属虚构",},tooltip: {trigger: "axis",axisPointer: {type: "cross",},},toolbox: {show: true,feature: {saveAsImage: {},},},xAxis: {type:…...
设计模式-单例模式(Singleton)
文章目录 前言一、单例模式的概念二、单例模式的实现三、单例模式的应用场景四、单例模式优缺点优点:缺点:总结 前言 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一…...
优漫动游 常见的AI视频生成网站的官方网站:
1、Lumen5 Lumen5是一款在线视频制作工具,利用人工智能技术能够迅速将文本、和音乐转换为视频。它可以帮助你把博客文章、社交媒体内容等转化为吸引人的视频,从而提高你的品牌曝光率和社交媒体的参与度。 2.Animoto Animoto是一个视频制作平台&…...

Vue中数据可视化关系图展示与关系图分析
Vue中数据可视化关系图展示与关系图分析 数据可视化是现代Web应用程序的重要组成部分之一,它可以帮助我们以图形的方式呈现和分析复杂的数据关系。Vue.js是一个流行的JavaScript框架,它提供了强大的工具来构建数据可视化应用。本文将介绍如何使用Vue.js…...

【启扬方案】基于启扬安卓屏一体机的医疗手推车解决方案
医疗手推车作为医院基础设施的一部分,被广泛应用于医院内部,包括急诊室、手术室、病房和其他临床部门。伴随着互联网技术的发展和行业的渗透,智慧医疗受到越来越多的青睐,这也使得很多医疗设施得到了改进,医疗手推车也…...
JavaScript实现MD5加密的6种方式
关于MD5: MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件。 在本案例中 可以看到MD5共有6种加密方法: 1, hex_md5(value) 2, b64_md5(value) 3, …...

腾讯云和阿里云2核2G服务器租用价格表对比
2核2G云服务器可以选择阿里云服务器或腾讯云服务器,腾讯云轻量2核2G3M带宽服务器95元一年,阿里云轻量2核2G3M带宽优惠价108元一年,不只是轻量应用服务器,阿里云还可以选择ECS云服务器u1,腾讯云也可以选择CVM标准型S5云…...

抖音无需API开发连接Stable Diffusion,实现自动根据评论区的指令生成图像并返回
抖音用户使用场景: 随着AI绘图的热度不断升高,许多抖音达人通过录制视频介绍不同的AI工具,包括产品背景、使用方法以及价格等,以吸引更多的用户。其中,Stable Diffusion这款产品受到了许多博主达人的青睐。在介绍这款产…...
MySQL(三)
DDL(数据定义语言) 库 /* 创建数据库testone */ create database testone; /* 查询数据库testone */ show databases; /* 选择数据库testone */ use testone; /* 删除数据库testone */ drop database testone; 表 创建表 create table table_name (…...

汽车级肖特基二极管DSS220-Q 200V 2A
DSS220-Q是什么二极管?贵司有生产吗? 肖特基二极管DSS220-Q符合汽车级AEC Q101标准吗? DSS220-Q贴片肖特基二极管参数是什么封装?正向电流和反向电压是多大? DSS220-Q肖特基二极管需要100KK,有现货吗&#…...
maven jetty post 上传长度设置
maven jetty post 上传长度设置 <plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.4.8.v20171121</version><configuration><scanIntervalSeconds>1</scanInter…...
LeetCode 面试题 03.03. 堆盘子
文章目录 一、题目二、C# 题解 一、题目 堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构 SetOfStacks,模拟这种行为。SetOfStacks 应该由…...
Python-函数进阶
函数的多返回值 按照返回值的顺序, 写对应顺序的多个变量接受即可, 变量之间用逗号隔开,支持不同类型的数据return def test_return():return 1, 2, 3x, y, z test_return()print(x) print(y) print(z)函数参数种类 使用方式上的不同&am…...
实操Hadoop大数据高可用集群搭建(hadoop3.1.3+zookeeper3.5.7+hbase3.1.3+kafka2.12)
前言 纯实操,无理论,本文是给公司搭建测试环境时记录的,已经按照这一套搭了四五遍大数据集群了,目前使用还未发现问题。 有问题麻烦指出,万分感谢! PS:Centos7.9、Rocky9.1可用 集群配置 iph…...

如何在 Ubuntu 上安装和使用 Nginx?
ginx(发音为“engine-x”)是一种流行的 Web 服务器软件,以其高性能和可靠性而闻名。它是许多流行网站使用的开源软件,包括 Netflix、GitHub 和 WordPress。Nginx 可以用作 Web 服务器、负载均衡器、反向代理和 HTTP 缓存等。 它以…...

seatunnel win idea 本地调试
调试FakeSource,LocalFile # Set the basic configuration of the task to be performed env {execution.parallelism 1job.mode "BATCH" }# Create a source to connect to Mongodb source {# This is a example source plugin **only for test and d…...

链路追踪Skywalking快速入门
目录 1 Skywalking概述1.1 微服务系统监控三要素1.2 什么是链路追踪1.2.1 链路追踪1.2.2 OpenTracing1、数据模型:2、核心接口语义 1.3 常见APM系统1.4 Skywalking介绍1、SkyWalking 核心功能:2、SkyWalking 特点:3、Skywalking架构图&#x…...

全开源影视APP源码带后台 苍穹影视APP源码 免受权带安装教程
苍穹影视 V20 全新后台七彩视界免受权开源源码此版本为天穹公益版开源无解密安装教程 全新后台很是都雅,源码全开源无加密。 PC 端对接教程: 建议在浮图下操作 正常安装前后端 然后安装米酷 cms 根据教程安装即可 米酷 cms 对接部门已被我改动,只要在安装…...

Qt+C++自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本
程序示例精选 QtC自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对<<QtC自建网页浏览器-Chrome blink最新内核基础上搭建-改进版…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...