当前位置: 首页 > news >正文

数据库——事务

        事务是指作为一个整体被执行的一系列操作。在数据库管理系统中,事务是指一组数据库操作(如插入、更新、删除等)的逻辑单元,也就是说事务的本质是把多个操作打包成一个操作,并且它要么完全执行,要么完全不执行,而且它的完全不执行并不是真正的完全不执行,而是如果在某个操作的过程出现错误,就会将前面的操作全部回退(也称回滚),使之回到还没开始执行的状态。那么回滚是如何使它返回到未执行的状态呢?其实只是把事务中执行的每个操作都记录(通过特定的日志,记录数据库事务操作的中间过程)下来,如果需要回滚,只需按照之前的操作的逆操作来执行就行,例如前面的操作是插入数据,它的逆操作就是删除数据。它还具有以下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# 题解 一、题目 堆盘子。设想有一堆盘子&#xff0c;堆太高可能会倒下来。因此&#xff0c;在现实生活中&#xff0c;盘子堆到一定高度时&#xff0c;我们就会另外堆一堆盘子。请实现数据结构 SetOfStacks&#xff0c;模拟这种行为。SetOfStacks 应该由…...

Python-函数进阶

函数的多返回值 按照返回值的顺序&#xff0c; 写对应顺序的多个变量接受即可&#xff0c; 变量之间用逗号隔开&#xff0c;支持不同类型的数据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)

前言 纯实操&#xff0c;无理论&#xff0c;本文是给公司搭建测试环境时记录的&#xff0c;已经按照这一套搭了四五遍大数据集群了&#xff0c;目前使用还未发现问题。 有问题麻烦指出&#xff0c;万分感谢&#xff01; PS&#xff1a;Centos7.9、Rocky9.1可用 集群配置 iph…...

如何在 Ubuntu 上安装和使用 Nginx?

ginx&#xff08;发音为“engine-x”&#xff09;是一种流行的 Web 服务器软件&#xff0c;以其高性能和可靠性而闻名。它是许多流行网站使用的开源软件&#xff0c;包括 Netflix、GitHub 和 WordPress。Nginx 可以用作 Web 服务器、负载均衡器、反向代理和 HTTP 缓存等。 它以…...

seatunnel win idea 本地调试

调试FakeSource&#xff0c;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、数据模型&#xff1a;2、核心接口语义 1.3 常见APM系统1.4 Skywalking介绍1、SkyWalking 核心功能&#xff1a;2、SkyWalking 特点&#xff1a;3、Skywalking架构图&#x…...

全开源影视APP源码带后台 苍穹影视APP源码 免受权带安装教程

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

Qt+C++自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本

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

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...