MySQL事务与事务的隔离级别

news2024/11/27 4:18:59

MySQL事务与事务的隔离级别

  • 什么事务?
  • 事务的特点(ACID)
  • 事务的隔离级别
    • 多事务运行的并发问题
    • 隔离级别
    • repeatable read(可重复读)之 MVCC(多版本并发控制) 并发机制优化

什么事务?

事务是指一组SQL语句的集合,集合中有多条SQL语句,可以是insert、update、select、delete,希望这些SQL语句执行是一致的,作为一个整体执行。要么都成功,要么都失败。

事务的特点(ACID)

原子性(Atomicity):当前事务的操作要么同时成功,要么同时失败。原子性由 undo log 日志来保证。

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。使用事务的最终目的,油业务代码正确逻辑保证。

隔离性(Isolation):在事务并发执行时,他们内部的操作互补干扰(指的是互不影响执行,事务执行后,数据的结果取决于事务的隔离级别)。

持久性(Durability):事务一旦提交,它对数据库的改变是永久性的。持久性由 redo log 日志来保证。

事务的隔离级别

多事务运行的并发问题

对于运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种的并发问题:

脏读(事务A读取到事务B未提交的数据):对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段。之后,若T2回滚,T1再次读取的内容就是临时且无效的
不可重复度(前后两次某一字段数据结果不一致):对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段。之后,T1再次读取同一个字段,值就不同了。
幻读(前后两次读取数据结果集不一致):对于两个事务T1,T2,T1从一个表中读取了一个字段,T2修改该字段并提交后,T1仍然读取到的是上第一次读取的值。

隔离级别

1、数据库事务的隔离性:
数据库系统必须具有隔离并发运行的各个事务的能力,使它们不会相互影响,避免各种并发问题。
2、一个事务与其他事务隔离的程度成为隔离级别,数据库规定了多种事务的隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发行就越弱
3、数据库提供的 4 种隔离级别:

隔离级别描述
read uncommitied(读未提交)允许事务读取未被其他事务提交的变更。脏读、不可重复读和幻读(脏写)问题都会出现
read commitied(读已提交)只允许事务读取已经被其他事务提交的变更。可避免脏读,但不可重复读和幻读问题依然可能出现
repeatable read(可重复读)确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可避免脏读不可重复读,但幻读的问题仍然存在
serializable(串行化)确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事物对该表插入、更新、删除操作,所有的并发问题都可以避免,但性能十分低下

在这里插入图片描述

4、Oracle 与 MySQL事务的隔离级别:

(1)Oracle 支持两种事务隔离级别(Oracle默认隔离级别为:READ COMMITTED

  • read uncommitied(读已提交)
  • serializable(串行化)

(2)MySQL支持以上4种事务隔离级别(MySQL 默认的隔离级别为:REPEATABLE READ

  • read uncommitied(读未提交)
  • read commitied(读已提交)
  • repeatable read(可重复读)
  • serializable(串行化)

repeatable read(可重复读)之 MVCC(多版本并发控制) 并发机制优化

参考视屏地址:https://www.bilibili.com/video/BV1TV411K7rz?p=4&vd_source=d4371d3b4f6dddfe6e6929585816cf32

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

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

相关文章

这些项目管理实际问题,你遇到过几个

大家好,我是老原。 我做了这么久的内容,给大家分享了很多干货、工具还有行业的内容。 今天的文章汇总了粉丝们来私信我的一些实际工作问题,不知道这些问题你熟不熟悉,是否也遇到过? 当然,这不仅是纯粹为…

postgresql 内核源码分析 表锁relation lock的使用,session lock会话锁的应用场景,操作表不再困难

​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 表锁介绍 当表打开,或者操作表时,都需要…

spring复习:(44)使用TransactionProxyFactoryBean来实现事务时,事务是怎么提交的?

TransactionAspectSupport类的invokeWithinTransaction方法的最后: 调用commitTransactionAfterReturning,它的代码如下: 调用的commit代码如下(AbstractPlatformTransactionManager类里): 其中调用的processCommit…

Altium Designer V23介绍、下载、安装、注册(激活)与汉化

一、Altium Designer简介 Altium Designer 是一款简单易用、原生3D设计增强的一体化设计环境,结合了原理图、ECAD库、规则和限制条件、BoM、供应链管理、ECO流程和世界一流的PCB设计工具。通过原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析…

代理IP、Socks5代理与网络安全:保护隐私与防御威胁的技术探索

目录 一、代理IP技术 二、代理IP保护隐私和网络安全 三、Socks5代理与网络安全 总结 一、代理IP技术 代理IP、Socks5代理IP是与网络安全相关的技术,可以用于保护隐私和防御威胁。下面是对这些技术的探索和解释: 1. 代理IP:代理IP是指通过…

什么是并发(非常详细)

按最简单、最基本的程度理解,并发(concurrency)是两个或多个同时独立进行的活动。并发现象遍布日常生活,我们可以边走路边说话,左右手同时做出不一样的动作,诸如此类。 计算机系统中的并发 若我们谈及计算…

图书馆管理的好帮手:Librarian Pro Mac 让你的阅读体验更加完美

Librarian Pro Mac是一款功能齐全、易于使用的图书馆管理软件,适用于个人用户、图书馆、学校和其他组织。它提供了丰富的功能和灵活的组织方式,帮助用户轻松管理和浏览他们的图书馆和收藏品。无论你是一个热衷于阅读的个人,还是一个需要管理大…

Linux小程序——进度条【Linux系统编程】

回车换行:回车(\r)是回到当前光标所在行的最开始,换行(\n)是换到下一行,回车换行就是到下一行的最开始。 缓冲区: 先看第一种:helloworld后面有反斜杠n,那么我们看到的现象是先打印…

01-复杂度2 Maximum Subsequence Sum

思路 比上一题(01-复杂度1 最大子列和问题),要多记录几个内容 首尾元素,当前子序列开头元素,当前子序列结尾元素,最佳子序列开头元素,current是否在此处清零(则下一个元素是开头元…

2023年四川大学生程序设计竞赛-A.旷野之息

题目描述 Cuber QQ 终于打败盖农救回了塞尔达公主,海拉鲁大地也开始灾后重建。 在统计学中,幂律表示的是两个量之间的函数关系,其中一个量的相对变化会导致另一个量的相应幂次比例的变化,且与初值无关:表现为一个量是…

注释气泡图函数(更新)

之前我们写过一个原创可视化函数Dotplot_anno.R,nature级别图表:一个注释气泡热图函数(适用于单细胞及普通数据)。主要解决的问题是1) 单细胞基因可视化分组注释。2) Bulk RNA差异基因热图、气泡图。3) 富集分析结果气泡图展示。这…

使用原生Redis命令实现分布式锁

推荐文章: 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; ​ 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、java后端接口API性能优化技巧 4、SpringBootMyBatis流式查询,处理大规模数据,提高系统的性能和响应…

【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏8

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

Failed to initialize NVML: Driver/library version mismatch (解决)

问题描述 运行nvidia-smi报错: Failed to initialize NVML: Driver/library version mismatch解决方法 只需一步:下载一个安装包,运行一个命令来重新安装cuda driver和cuda toolkit(在一个包里)。 到这里&#xff1…

JVS开源基础框架:用户管理介绍(支持同步钉钉、企微、微信等)

在企业内部系统中,用户管理是指对系统内的用户进行管理、授权和权限管理的过程,这里主要介绍用户的创建与基本信息的管理,权限、登录等详细介绍请参考相关章节。 用户管理界面 点击平台管理-用户管理,界面上展示了组织管理与组织…

磁盘分区形式MBR与GPT介绍

磁盘分区形式MBR与GPT介绍 磁盘分区形式有两种: 1、MBR(主启动记录)形式,它是存在于磁盘驱动器开始部分的一个特殊的启动扇区; 2、GPT(GUID分区表)形式,它是一种使用UEFI启动的磁盘…

网络操作系统详解

网络操作系统的概念 操作系统是计算机系统中用来管理各种软硬件资源,提供人机交互使用的软件。网络操作系统可实现操作系统的所有功能,并且能够对网络中的资源进行管理和共享。网络操作系统(Network Operation System,NOS)是使网络上各种计算…

ai绘画怎么弄?这份ai绘画教程你必须知道

我有一个关系非常好的女性朋友,她的闺蜜即将过生日,她想给她闺蜜准备一份特别的礼物。但是,她对绘画毫无天赋。因此,我给她推荐了几款好用的ai绘画工具,这些神奇的ai绘画工具能帮助她创作出栩栩如生、美丽动人的女生形…

从零开始基于go-zero的go web项目实战-01项目初始化

从零开始基于go-zero搭建go web项目实战-01项目初始化 简介 导语 Go 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,go语言的特点: 语法简洁Go语言简单易学,学习曲线平缓代码风格统一执行性能…

Spring Boot进阶(56):使用 ECharts 绘制各种花哨的统计图 | 超级详细,建议收藏

1. 前言🔥 在前几期,我们重点学习了如何在Spring Boot中使用模板引擎Thymeleaf开发Web应用的基础。接下来,我们介绍一下后端开发经常会遇到的一个场景:可视化图表。比如如下: 通常啊,这类业务在客户端应用中…