mysql事务 事务并发问题 隔离级别 以及原理

mysql事务

简介:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

事务四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

隔离性:

依赖于数据库的隔离级别
简单来说就是事务和事务之前不会互相影响

持久性:

事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
因为数据库中的数据是存储在磁盘当中的 会永久保存

并发事务引发的问题:

脏读:绝对的错误 读到了事务没有提交的数据

不可重复读:一个事务先后读取同一条记录,但是两次读取到的数据不同

幻读:一个事务在读取时没有这行数据 但是再插入数据时又发现这一行已经存在了 感觉像是出现了幻影(注意是幻影)

事务隔离级别:

在这里插入图片描述

  • Read Uncommitted(读未提交)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。三种并发事务问题都会出现。

  • Read Committed(读已提交)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。
它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。
解决了脏读 但是会有不可重复度 和 幻读
这种隔离级别也支持所谓的不可重复读(NonrepeatableRead),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

  • Repeatable Read(可重复读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)
InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

  • Serializable(串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
可以理解成只能执行一个事务 不存在并发

查看事务隔离级别:

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意:事务隔离级别越高,数据越安全,但是性能越低。

隔离级别的实现原理

MySQL使用锁和MVCC来实现事务隔离。

锁是实现事务隔离的主要机制。MySQL中的锁可以分为全局锁和局部锁。全局锁影响整个数据库,而局部锁只影响单个表或行。常见的锁类型包括:

表级锁:最简单的锁类型,它锁定整个表,防止其他事务对表进行修改。MyISAM存储引擎使用表级锁。
行级锁:只锁定被访问的行,允许并发事务同时访问其他行。InnoDB存储引擎使用行级锁。
元数据锁(MDL):用于保护对表结构的修改,防止其他会话同时修改表结构。 多版本并发控制(MVCC)

多版本并发控制(MVCC)

MVCC提供了一种非阻塞的读操作方式,允许读操作看到一个数据的“快照”,而不是当前数据。InnoDB存储引擎使用MVCC来实现可重复读隔离级别。通过为每个事务提供一个数据快照,MVCC确保了事务在执行过程中看到的数据一致性。

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

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

相关文章

从0到1,5步打造安全HTTPS网站:Nginx实战教程

部署一个安全的HTTPS站点使用Nginx作为Web服务器涉及几个关键步骤,以下是一个全面的教程,概括了从安装必要的SSL模块到配置HTTPS并实现HTTP到HTTPS的自动重定向的全过程。 1. 安装Nginx并确认SSL模块确保Nginx已经安装,并且启用了http_ssl_m…

【C++扩展】函数别名

引言 int f(int param) {return d(param); }上面这段代码看着是不是很不合理,为什么不直接调用d函数,而非要通过f函数来调用d函数? 正文 意义 引言部分抛出的问题如何解答? 其实,抛开代码的语义和业务功能&#xf…

.哈希表.

哈希 哈希表:将大而复杂的数据映射到紧凑的区间内。分为:①存储结构 (离散化是特殊的哈希,之前讲的离散化是严格保序的 映射到区间上是连续递增的) 哈希不保序,这里讲的是一般的哈希 弊端:若…

Linux(四)

Linux(四) shell脚本shell脚本开发过程创建创建.sh文件编写.sh文件添加执行的权限 chmod 777 1.sh运行 shell中注释shell中变量用户自定义变量 (尽量大写)位置参数即命令行参数预定义变量环境变量 shell中程序和语句说明性语句功能性语句echo 输出read 键…

网上打印试卷的步骤是什么

对于学生和家长来说,打印试卷是日常学习中的一项重要需求。那么,如何在网上方便地打印试卷呢?下面,就让我来为您介绍琢贝云打印的试卷打印步骤。 一、选择琢贝云打印的原因 支持多种文件格式打印,包括图片、PPT、PDF、…

每日百万交易的支付系统,如何设置JVM堆内存大小?

每日百万交易的支付系统,如何设置JVM堆内存大小? 1、支付背景的引入2、支付的核心业务流程3、每日百万交易支付系统的压力在哪里?4、支付系统每秒钟需要处理多少笔支付单5、每个支付订单处理需要耗时多久6、每个支付订单大概需要多大的内存空间7、每秒发起的支付请求对内存的…

手撕C语言题典——消失的数字

目录 前言 一,思路 1)排序查找 2)数据求和,依次减去中值 3) 异或 二,异或的代码实现 前言 依旧是一道力扣上的题,通过不同思路的不同时间复杂度来分析,让我们看看有什么不同。 面试题 17…

贪心-ACW803区间合并-XMUOJ力量碎片合并

题目 思路 附上几个参考链接 for(auto i : v)遍历容器元素_for auto 遍历-CSDN博客 C pair的基本用法总结(整理)_c pair用法-CSDN博客 使用 sort 实现自定义排序 - AcWing 话不多说,直接上代码 代码 /* ACW803区间合并-XMUOJ力量碎片合…

sql server怎么存储图片

sql server怎么存储图片 在SQL Server中,可以使用VARBINARY数据类型来存储图片。以下是一个简单的例子,展示了如何将图片存储到数据库中,并从数据库中检索出来。 首先,创建一个表来存储图片数据: CREATE TABLE Image…

MySQL查询某个字段含有字母数字的值

在MySQL中,要查询某个字段含有字母和数字的值,可以使用正则表达式配合REGEXP操作符。以下是一个详细的示例,说明如何编写这样的查询。 假设我们有一个名为my_table的表,其中有一个名为my_column的字段,我们想要查询这…

第13章-循迹功能 循迹小车讲解 原理分析 STM32智能小车循迹教程 红外对管使用 PID循迹算法分析

讲解一下我们小车里面的循迹部分,包括红外基础使用,无PID循迹和有PID循迹。 第13章-循迹功能 13.1-非PID循迹功能完成 先红外对管调试 我们这里学习一下,如何实现循迹功能 如何才能让小车沿着黑线运动、要让小车感知到黑线的位置&#x…

正运动VPLC系列机器视觉运动控制一体机快速入门

VPLC系列机器视觉运动控制一体机快速入门(一)-正运动技术 (zmotion.com.cn) VPLC系列机器视觉运动控制一体机快速入门(二)-正运动技术 (zmotion.com.cn) VPLC系列机器视觉运动控制一体机快速入门(三)-正运…

C/C++ vector详解

要想了解STL,就必须会看: cplusplus.comhttps://legacy.cplusplus.com/ 官方内容全都是英文的,可以参考: C/C初始识https://blog.csdn.net/2301_77087344/article/details/138596294?spm1001.2014.3001.5501 vector&#xff…

sql聚合函数使用-笔记

sql聚合函数使用-笔记 SELECT SUM ( case when procurement_type 公益推送 then 1 else 0 end ) gywxTotal,SUM ( CASE WHEN (status 1 and procurement_type 公益推送) THEN 1 ELSE 0 END ) gywxYsc,SUM ( CASE WHEN (status ! 1 and procurement_type 公益推送) THEN 1 …

十二、OpenAI语音转文本

1 介绍 音频API提供两个语音转文本的端点,transciptions 和 translations, 它们基于最强的开源模型large-v2 Whisper.可以被使用到: 将音频转换成任何语言的音频翻译并转化音频到英文 上传文件的大小限制在25M以内,支持的音频格式有&#x…

【Typescript】类、类实例、构造函数、类是否也是构造函数....

务必注意&#xff1a;Typescript中类也是一个构造函数【可以new】但是有时候针对不确定的类型需要as转换一下 才能new class Test { }class Test01 extends Test {a 1 }function ok<T extends typeof Test>(asyncClass: T): T {/*** 1. 这里的T是一个【类的类型】*/ret…

Java面试题:请分析Java中的并发工具类,如ConcurrentHashMap和CopyOnWriteArrayList的内部实现原理

Java中的并发工具类是java.util.concurrent包提供的一些用于多线程环境下的集合类&#xff0c;它们通过不同的机制来保证线程安全。以下是ConcurrentHashMap和CopyOnWriteArrayList的内部实现原理分析&#xff1a; ConcurrentHashMap ConcurrentHashMap是一个线程安全的哈希表…

React常见面试题及参考答案(3万字长文)

目录 描述React中的组件生命周期 解释React中的JSX是什么 什么是React中的虚拟DOM?

辐射度技术在AI去衣中的魅力与科学

引言&#xff1a; 在当今的数字化时代&#xff0c;人工智能正逐渐渗透到我们生活的方方面面。其中&#xff0c;AI去衣技术作为一项颇具争议但又不失其科技创新的应用&#xff0c;正引起越来越多的关注和讨论。而在实现高质量图像渲染的过程中&#xff0c;辐射度技术凭借其卓越的…