事务的4个特性和4个隔离级别

news2025/4/4 14:43:19

事务的4个特性和4个隔离级别

    • 1. 什么是事务
    • 2. 事务的ACID特性
      • 2.1 原子性
      • 2.2 一致性
      • 2.3 持久性
      • 2.4 隔离性
    • 3. 事务的创建
    • 4. 事务并发时出现的问题
      • 4.1 DIRTY READ 脏读
      • 4.2 NON - REPEATABLR READ 不可重复读
      • 4.3 PHANTOM READ 幻读
    • 5. 事务的隔离级别
      • 5.1 READ UNCOMMITTED 读未提交
      • 5.2 READ COMMITTD 读已提交
      • 5.3 REPEATABLE 可重复读
      • 5.4 SERIALIZABLE 串行化

1. 什么是事务

事务,简单来说,就是将一组SQL语句组合成一个逻辑单元,这些语句要么全部成功执行,使数据库状态发生预期的改变;要么全部失败,数据库回滚到事务开始前的状态,仿佛这组操作从未发生过。

以日常生活中的转账场景为例,当A向B转账100元时,“A账户减少100元”和“B账户增加100元”这两个操作必须作为一个整体来执行,要么都成功完成转账,要么因为任何原因(如余额不足、网络故障等)都不执行,以保证资金的准确性和一致性。这,就是一个典型的事务。

2. 事务的ACID特性

事务之所以能可靠地管理数据,离不开其具有的四大特性:原子性(Atomicity)、一致性(Consistency)、持久性(Durability)和隔离性(Isolation),简称为ACID特性。

2.1 原子性

原子性确保事务是一个不可分割的最小工作单元。就像化学反应中的原子一样,事务中的所有操作要么一起成功,将数据持久化到数据库;要么一起失败,数据库状态回滚到事务开始之前,不会出现部分操作成功、部分操作失败的中间状态。

2.2 一致性

一致性要求事务执行前后,数据库的完整性约束没有被破坏,数据必须符合业务逻辑和预先设定的规则。例如,在转账事务中,转账前后的账户总金额应该保持不变,这是保证数据一致性的基本体现。

2.3 持久性

一旦事务被成功提交,其所做的修改就会永久性地保存在数据库中。即使后续系统发生故障,如硬件损坏、软件崩溃或断电等,已提交的数据也不会丢失,确保了数据的可靠性和稳定性。

2.4 隔离性

隔离性使得多个并发事务在执行时,相互之间不会产生干扰,每个事务都像是在独立运行。不同的隔离级别决定了事务之间的隔离程度,以及可能出现的并发问题,这将在后续详细讨论。

3. 事务的创建

在SQL语言中,我们可以通过以下语句来灵活地控制事务:

-- 开启一个新的事务,两种方式均可
START TRANSACTION;
-- 或者
BEGIN;

-- 当事务中的所有操作都顺利完成,使用此语句提交事务,将修改永久保存到数据库
COMMIT;

-- 如果在事务执行过程中出现错误或需要回滚操作,执行此语句取消已执行的所有修改
ROLLBACK;

4. 事务并发时出现的问题

当多个事务同时并发执行时,由于事务之间的相互影响,可能会出现以下几种常见的问题:

4.1 DIRTY READ 脏读

脏读是指一个事务读取到了另一个事务尚未提交的数据。如果未提交事务随后回滚,那么读取到的数据就是无效的,这可能导致数据的不一致和错误的业务决策。

4.2 NON - REPEATABLR READ 不可重复读

不可重复读是指在同一个事务中,多次读取同一数据时,由于其他事务在期间对数据进行了修改并提交,导致每次读取的结果不一致。这会给需要在事务中多次读取相同数据进行业务处理的场景带来困扰。

4.3 PHANTOM READ 幻读

幻读是指一个事务在执行过程中,发现另一个事务插入了新的数据,导致该事务再次读取数据时,出现了之前不存在的记录,仿佛产生了“幻觉”。例如在电商下单场景中,用户点击立即购买成功进入下单页面,准备付款时却显示库存不足,这就是幻读的一个典型例子。

5. 事务的隔离级别

为了解决事务并发执行时出现的上述问题,数据库提供了不同的隔离级别,每个隔离级别对并发事务的处理方式和所能避免的问题各不相同。常见的隔离级别有以下4种:

5.1 READ UNCOMMITTED 读未提交

这是最低的隔离级别,允许一个事务读取另一个事务尚未提交的数据。由于此级别几乎没有任何隔离措施,所以可能会出现脏读、不可重复读和幻读等各种并发问题,在实际应用中较少使用。

5.2 READ COMMITTD 读已提交

大多数数据库系统的默认隔离级别。在该级别下,一个事务只能读取其他事务已经提交的数据,可以有效避免脏读问题,但仍然可能出现不可重复读和幻读。

5.3 REPEATABLE 可重复读

MySQL的默认隔离级别。在此级别下,同一个事务内多次读取相同数据时,数据保持一致,能够避免脏读和不可重复读。然而,对于幻读问题,虽然在一定程度上得到了缓解,但并不能完全杜绝。

5.4 SERIALIZABLE 串行化

这是最高的隔离级别,事务会按照顺序依次执行,完全避免了脏读、不可重复读和幻读等所有并发问题。但由于事务串行执行,并发性能较低,适用于对数据一致性要求极高、并发量较低的场景。

通过下面的图片,可以更直观地了解不同隔离级别与并发问题之间的关系:

理解事务的概念、特性、操作以及并发问题和隔离级别,对于开发高效、可靠的数据库应用至关重要。在实际项目中,我们需要根据业务需求和系统性能要求,合理选择事务的隔离级别,以平衡数据一致性和并发性能之间的关系。

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

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

相关文章

对计算机中缓存的理解和使用Redis作为缓存

使用Redis作为缓存缓存例子缓存的引入 Redis缓存的实现 使用Redis作为缓存 缓存 ​什么是缓存,第一次接触这个东西是在考研学习408的时候,计算机组成原理里面学习到Cache缓存,用于降低由于内存和CPU的速度的差异带来的延迟。它是在CPU和内存…

SOME/IP-SD -- 协议英文原文讲解5

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类:exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

达梦有没有类似oerr的功能

在oracle 23ai的sqlplus中&#xff0c;直接看异常信息说明&#xff1a; 达梦没有此功能&#xff0c;但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…

实战-网安

面试感受:网安公司前端实习 今天我有幸面试了一家网络安全公司的前端开发实习岗位,整个过程让我受益匪浅,也让我对未来的职业发展有了更清晰的认识。 首先,面试官非常专业且友好,整个面试氛围轻松但不失严谨。面试一开始,面试官简单介绍了公司背景和团队文化,让我对公…

MybatisPlus-扩展功能-枚举处理器

在Mybatis里有一个叫TypeHandler的类型处理器&#xff0c;我们常见的PO当中的这些成员变量的数据类型&#xff0c;它都有对应的处理器&#xff0c;因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器&#xff0…

力扣2454. 下一个更大元素 IV

力扣2454. 下一个更大元素 IV 题目 题目解析及思路 题目要求对于每个数&#xff0c;找到右边比它大的第二个数&#xff0c;并记录在ans数组中 如果是右边第一个大的&#xff0c;就用一个递减栈即可&#xff0c;栈顶元素如果<当前元素则弹出 第二个大数就要利用弹出的栈顶…

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载&#xff0c;导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas&#xff0c;UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…

Ollama部署与常用命令

Ollama是一款开源工具&#xff0c;其目标是简化大语言模型在本地环境的部署和使用。它支持多种流行的开源大语言模型&#xff0c;如 Llama 2、Qwen2.5等。 通过Ollama&#xff0c;用户无需具备深厚的技术背景&#xff0c;就能在普通的消费级硬件上快速搭建一个强大的语言处理环…

Visual Studio Code 远程开发方法

方法1 共享屏幕远程控制&#xff0c;如 to desk, 向日葵 &#xff0c;像素太差&#xff0c;放弃 方法2 内网穿透 ssh 第二个方法又很麻烦&#xff0c;尤其是对于 windows 电脑&#xff0c;要使用 ssh 还需要额外安装杂七杂八的东西&#xff1b;并且内网穿透服务提供商提供的…

C语言预编译

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、预处理的作用与流程&#xf…

汽车智能制造企业数字化转型SAP解决方案总结

一、项目实施概述 项目阶段划分&#xff1a; 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑&#xff1a; 2022年6月6日&#xff1a;项目启动会2022年12月1日&#xff1a;系统上线 二、总体目标 通过SAP实施&#xff0c;构建研产供销协同、业财一…

flowable-ui 的会签功能实现

场景&#xff1a;在进行智慧保时通开发时&#xff0c;有个协作合同入围功能&#xff0c;这个功能的流程图里有个评审小组&#xff0c;这个评审小组就需要进行会签操作&#xff0c;会签完成后&#xff0c;需要依据是否有不通过的情况选择下一步走的流程 思考步骤&#xff1a; 首…

大连指令数据集的创建--数据收集与预处理_02

1.去哪儿爬虫 编程语言&#xff1a;Python爬虫框架&#xff1a;Selenium&#xff08;用于浏览器自动化&#xff09;解析库&#xff1a;BeautifulSoup&#xff08;用于解析HTML&#xff09; 2.爬虫策略 目标网站&#xff1a;去哪儿&#xff08;https://travel.qunar.com/trav…

STM32MP157A-FSMP1A单片机移植Linux系统SPI总线驱动

SPI总线驱动整体上与I2C总线驱动类型&#xff0c;差别主要在设备树和数据传输上&#xff0c;由于SPI是由4根线实现主从机的通信&#xff0c;在设备树上配置时需要对SPI进行设置。 原理图可知&#xff0c;数码管使用的SPI4对应了单片机上的PE11-->SPI4-NSS,PE12-->SPI4-S…

java医院多维度综合绩效考核源码,医院绩效管理系统,支持一键核算和批量操作,设有审核机制,允许数据修正

医院绩效考核管理系统&#xff0c;java医院绩效核算系统源码&#xff0c;采用多维度综合绩效考核的形式&#xff0c;针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求&#xff0c;对考核方案中各维度进行灵活配置&#xff0c;对各维…

C语言学习笔记-初阶(13)scanf介绍

当我们有了变量&#xff0c;我们需要给变量输入值就可以使用 scanf 函数&#xff0c;如果需要将变量的值输出在屏幕上的时候可以使用 printf 函数&#xff0c;下面看⼀个例子&#xff1a; #include <stdio.h> int main() {int score 0;printf("请输⼊成绩:")…

如何让传统制造企业从0到1实现数字化突破?

随着全球制造业不断向智能化、数字化转型&#xff0c;传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新&#xff0c;更是管理、文化、业务流程等全方位的变革。从零开始&#xff0c;如何带领一家传统制造企业走向数字化突破&#xff0c;是许多企业领导者面…

【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取

【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取 一、问题背景 政府的icp备案时&#xff0c;或者某些三方SDK以来的管理后台&#xff0c;都需要配置鸿蒙应用的公钥和证书MD5指纹 二、解决方案 专有名词解释&#xff1a; 华为AppGallery Connect简称 AGC平台&#xff0…

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴&#xff1a;可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题&#xff0c;并非是软件内自主实现的PDF合并&#xff0c;而是调用的pdftk这一工具&#xff0c;但楼主并没有提供pdftk&#xff0c;而…