Mysql的事务隔离机制

文章目录

  • 事务基础概念
  • 隔离性与隔离机制的重要性
  • 四种隔离级别
    • 读未提交
    • 读已提交
    • 可重复读
    • 串行化
  • 隔离级别设置与查看

事务基础概念

事务是一组数据库操作,这些操作要么全部成功执行,要么全部不执行。在 MySQL 中,事务通常以START TRANSACTION开始,以COMMIT(提交)或ROLLBACK(回滚)结束。事务具有原子性、一致性、隔离性和持久性(ACID)特性。

隔离性与隔离机制的重要性

隔离性确保每个事务在执行时感觉不到其他并发事务的存在。如果没有适当的隔离机制,多个事务同时操作相同的数据可能会导致数据不一致的情况,如脏读、不可重复读和幻读。

四种隔离级别

读未提交

脏读:假设事务 A 正在更新表中的一条记录,将某个字段的值从 10 修改为 20,但尚未提交。此时事务 B 读取该记录,得到了更新后的值 20。接着事务 A 由于某种原因回滚了操作,数据恢复到原来的值 10。事务 B 读取到的就是 “脏” 数据,这种情况就是脏读。
性能影响:这是隔离性最弱的级别,它允许事务读取未提交的数据,因此并发性能相对较高。不过,由于可能出现脏读问题,在实际应用中很少使用这个级别,除非对数据的实时性要求极高且可以容忍数据不一致的情况。

读已提交

不可重复读:事务 A 开始,读取了某记录的值为 10。然后事务 B 更新了这条记录,将其值改为 20 并提交。当事务 A 再次读取该记录时,得到的值为 20。对于事务 A 来说,同一事务内两次读取同一条记录得到了不同的值,这就是不可重复读。
性能与应用场景:读已提交级别可以有效避免脏读问题,在大多数数据库应用中是比较常用的隔离级别。它在保证数据相对一致性的同时,提供了较好的并发性能,适用于对数据实时性有一定要求,但对同一事务内数据多次读取的一致性要求不是特别严格的场景,如一些在线交易系统中的查询操作。

可重复读

幻读:事务 A 根据某个条件查询记录,例如 “SELECT * FROM table WHERE condition = true”,此时没有符合条件的记录。然后事务 B 插入了一条符合该条件的记录并提交。当事务 A 再次执行相同的查询语句时,发现有了一条之前不存在的记录,这就是幻读。
InnoDB 引擎下的解决方式:在 InnoDB 存储引擎下,可重复读级别通过使用 Next - Key Locks(间隙锁和行锁的组合)来解决幻读问题。它保证在一个事务执行期间,按照相同的查询条件进行查询时,不会出现新插入的符合条件的记录影响结果。
性能与应用场景:可重复读是 MySQL 默认的事务隔离级别。它在保证同一事务内数据读取一致性方面表现出色,适用于对数据一致性要求较高的场景,如财务系统、库存管理系统等。虽然它会使用间隙锁等机制来防止幻读,一定程度上影响并发性能,但在很多实际应用中,这种性能损失是可以接受的。

串行化

原理与执行方式:在串行化隔离级别下,事务被严格地串行执行。就好像多个事务在排队依次执行一样,一个事务完成所有操作后,下一个事务才能开始。
性能与应用场景:这种隔离级别可以完全避免脏读、不可重复读和幻读问题,保证了数据的最高程度的一致性。但是它的并发性能最差,因为所有事务都不能并发执行。通常只在对数据一致性要求极高,并且并发操作很少的情况下使用,如银行系统中的核心账务处理部分。

隔离级别设置与查看

  • 在 MySQL 中,可以使用SET TRANSACTION ISOLATION LEVEL语句来设置事务隔离级别。例如,SET TRANSACTION ISOLATION LEVEL READ COMMITTED;设置为读已提交级别。
  • 可以通过SELECT @@tx_isolation;(在 MySQL 8.0 之前)或SELECT @@transaction_isolation;(MySQL 8.0 及之后)来查看当前的事务隔离级别。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

window如何将powershell以管理员身份添加到右键菜单?(按住Shift键显示)

window如何将powershell以管理员身份添加到右键菜单? 在 Windows 中,将 PowerShell 以管理员身份添加到右键菜单,可以让你在需要提升权限的情况下快速打开 PowerShell 窗口。以下是详细的步骤,包括手动编辑注册表和使用注册表脚本…

从零开始开发纯血鸿蒙应用之逻辑封装

从零开始开发纯血鸿蒙应用 一、前言二、逻辑封装的原则三、实现 FileUtil1、统一的存放位置2、文件的增删改查2.1、文件创建与文件保存2.2、文件读取2.2.1、读取内部文件2.2.2、读取外部文件 3、文件删除 四、总结 一、前言 应用的动态,借助 UI 响应完成&#xff0…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒,但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理,这样在查找问题,或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

(一)开发环境搭建以及配置

文章目录 Vmware安装Ubuntu的搭建Ubuntu常规配置换源更新源安装open-vm-tools Samba服务器安装第一步安装第二步 建立共享文件夹第三步配置 Samba 文件 以及 设置Samba用户密码第四步重启 Samba 服务器第五步Windows 和 Ubuntu 如何借助Samba互传 建立虚拟机自带的共享文件夹建…

闲谭Scala(2)--安装与环境配置

1. 概述 Java开发环境安装,需要两步,第一安装JDK,第二配置环境变量。 Scala的话,也是两步,第一安装Scale环境,第二配置环境变量。 需要注意的是,配置环境变量,主要是想让windows操…

MySQL语句学习第二篇_数据库

MySQL语句学习第三篇_数据库 专栏记录MySQL的学习,感谢大家观看。 本章的专栏📚➡️MySQL语法学习 本博客前一章节指向➡️MySQL语句学习第一篇 本人的博客➡️:如烟花般绚烂却又稍纵即逝的主页 目录 MySQL是什么?关于数据库的基础操作MySQL…

基于ArcGIS Pro的SWAT模型在流域水循环、水生态模拟中的应用及案例分析;SWAT模型安装、运行到结果读取全流程指导

目前,流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型,能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…

太速科技-519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡

基于ZU19EG的4路100G光纤的PCIe 加速计算卡 一、板卡概述 本板卡系我司自主设计研发,基于Xilinx公司Zynq UltraScale MPSOC系列SOC XCZU19EG-FFVC1760架构,支持PCIE Gen3x16模式。其中,ARM端搭载一组64-bit DDR4,总容量达…

一个C#开发的APP

开发方式 C#Web、AndroidWebView 系统设计 系统主要分两个部分。一个是内容(文章)发布系统,另一个是预约和支付系统。 内容发布系统 和普通的文章发布系统不一样的地方在于,我们把每篇文章和大师关联起来。在文章的下方会显示…

【LLM】Langflow 的简单使用

(PS:爆肝整理,请不要吝啬你的点赞和收藏。) 什么是 Langflow ?Langflow 是一种用于构建多智能体和RAG应用的可视化框架。它提供了个无需编码的 AI 生态系统,能够无缝集成各种常用工具和技术栈。Langflow 以 Python 为基础&#x…

linux自动化批量分发SSH密钥同时批量测试SSH连接教程(包含自动化脚本代码)

1、检查端口 检查分发对象22端口是否打开 nmap -p22 ip地址如果要批量检查端口可以参考我写的这篇文章:linux自动化一键批量检查主机端口 2、命令行分发密钥原理 Linux分发密钥原理主要涉及SSH(Secure Shell)协议,该协议用于…

Ubuntu 下使用命令行将 U 盘格式化为 ext4、FAT32 和 exFAT 的详细教程

Ubuntu 下使用命令行将 U 盘格式化为 ext4、FAT32 和 exFAT 的详细教程 作者:Witheart更新时间:20241228 本教程将详细介绍如何将 U 盘格式化为 ext4、FAT32 和 exFAT 文件系统,同时包括如何安装必要工具(如 exfat-utils&#x…

【漫话机器学习系列】028.CP

Mallows’ Cp:标准化公式解析与应用 Mallows’ Cp 是一种常用的模型选择工具,用于在一系列候选模型中权衡拟合度和复杂性,帮助我们选择性能最优的模型。本文将基于其标准化公式展开详细解析,并探讨其应用场景、实现方法、优点与局…

Python编程技术

设计目的 该项目框架Scrapy可以让我们平时所学的技术整合旨在帮助学习者提高Python编程技能并熟悉基本概念: 1. 学习基本概念:介绍Python的基本概念,如变量、数据类型、条件语句、循环等。 2. 掌握基本编程技巧:教授学生如何使…

论文阅读《Cross-scale multi-instance learning for pathological image diagnosis》

From:2024 MIA CS-MIL GitHub:https://github.com/hrlblab/CS-MIL 一、Abstract: 在数字病理学中,分析高分辨率全幻灯片图像(WSIs)时涉及多个尺度的信息是一个重大挑战。多实例学习(MIL&#x…

短视频平台的视频水印怎么去除?

当你看到某个短视频,觉得内容非常有价值,想要个人收藏以便日后学习或回顾,但发现短视频平台无法直接下载且带有水印时,以下提供的几种方法将帮助你轻松去除水印,获取高清无水印的视频内容。 方法一:使用第…

【Redis】Redis 典型应用 - 缓存 (cache)

目录 1. 什么是缓存 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 4. 缓存的淘汰策略 5. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 关于缓存预热 (Cache preheating) 关于缓存穿透 (Cache penetration) 关于缓存雪崩 (Cache avalanche) 关…

解决springdoc-openapi-ui(Swagger3)跳转默认界面问题

文章目录 问题现象解决方法 问题现象 项目正确引入springdoc-openapi-ui依赖&#xff0c;但是访问/swagger-ui/index.html界面时&#xff0c;跳转到了默认的界面&#xff0c;如下图所示&#xff1a; 解决方法 1、升级maven依赖为1.8.0以上&#xff1a; <dependency>…

绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图

clc clear close all %% 读取数据 load(MyColor.mat) %读取颜色包for iloop 1:25 %提取工作表数据data0(iloop) {readtable(data.xlsx,sheet,iloop)}; end%% 解析数据 countzeros(23,14); for iloop 1:25index(iloop) { cell2mat(table2array(data0{1,iloop}(1,1)))};data(i…

HALCON中用于分类的高斯混合模型create_class_gmm

目录 一、创建用于分类的高斯混合模型函数二、代码和效果展示三、相关函数 一、创建用于分类的高斯混合模型函数 create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)create_class_gmm创建用于分类的高斯…