MySQL的事务

Spring事务和Mysql事务总结 目录spring事务与数据库事务与锁之间的关系五分钟搞清楚MySQL事务隔离级别//dao spring事务与数据库事务与锁之间的关系 一直没搞清楚spring事务与数据库事务与锁之间的关系,也许是因为这个体系非常庞大,确实比较凌乱。 后来从一个博客上看到:spring事务本质上使用数据库事务,而数据库事务本质上使用数据库锁,所以spring事务本质上使用数据库锁,开启spring事务意味着使用数... 阅读详情

MySQL事物的四大特性:

原子性,一致性,隔离性,持久性。

事物的隔离性是如何保证的?

事物的隔离性由MVCC和锁保证的。

可重复读隔离界别下的快照读(普通select),是通过MVCC来保证事务隔离性的,当前读(update、select...for update)是通过行级锁来保证事务的隔离性的。

事物的持久性是如何保证的?

事物的持久性是由redo log保证的,因为MySQL通过WAL(先写日志再写数据)机制,在修改数据的时候,会将本次对数据页的修改以redo log的形式记录下来,这个时候更新就算完成了。Buffer Pool的脏页会通过后台线程刷盘,即使脏页还没刷盘的时候发生了数据库重启,由于修改操作都记录到了redo log,之前已经提交的记录都不会丢失,重启后通过redo log,恢复脏页数据,从而保证了事物的持久性。

事物的原子性是如何保证的?

事物的原子性是通过undo log实现的,在事务还没提交前,历史数据会记录在undo log中,如果事务执行过程中,出现了错误或者用户执行了ROLLBACK语句,MySQL可以利用undo log中的历史数据,将数据恢复到事务开始之前的状态,从而保证了事物的原子性。

MySQL的隔离级别:

MySQL默认的隔离级别有可重复读,除此之外,MySQL还支持读未提交,读提交,串行化三个隔离界别

我了解到的并发问题存在脏读,不可重复读,幻读这三种,不同的隔离级别,解决的问题也各不相同。

出现的问题:

脏读,不可重复读,脏读的意思:

  • 脏读是指一个事务读取了另一个事务还未提交的数据,如果另一个事务回滚,则读取的数据是无效的。脏读可能导致数据的不一致性
  • 不可重复读是指一个事务多次读取同一条数据,但是在此期间另一个事务修改了该记录,导致前后读取的数据不一致,不可重复读可能导致数据的不一致性
  • 幻读是指一个事务多次执行同一个查询,但是在此期间另一个事务插入了符合该查询条件的新数据,导致前后数据不一致,幻读可能导致数据的不完整性。

解决的问题:

  • 读未提交一个问题也没有解决
  • 读已提交避免了脏读的问题,但是还存在不可重复读和幻读两个问题
  • 可重复读避免了脏读和不可重复读的问题,不过对于幻读问题是很大程度上避免了,没有完全避免
  • 串行化是所有问题都可以避免,但是事务的并发性能是最差的。

MySQL提供了两种查询方式,一种是快照读,就是普通的select语句,另一种是当前读,比如select for update 语句。不同的查询方式,解决不可重复读问题的方式是不一样的。

可重复读隔离级别下如何解决不可重复读的:

针对快照读的话,是通过MVCC机制来解决的,在可重复读隔离级别下,第一次select查询的时候,会生成readview,在第二次执行select查询的时候,会复用这个readview,这样前后两次查询的记录都是一样的,不会读到其他事务更新的操作,这样就不会发生不可重复读的问题了。

针对当前读的话,靠行级锁中的记录所来实现的,在可重复读隔离级别下,第一次select for update 语句查询的时候,会对记录加next-key锁,这个锁包含了记录锁,这时候如果其他事务更新了加了锁的记录,都会被阻塞住,这样就不会发生不可重复读问题了。

可重复读隔离界别下如何解决幻读:

针对快照读的话,是通过MVCC机制来解决的,在可重复读隔离级别下,第一个select查询的时候,会生成readview,在第二次执行select查询的时候,会复用这个readview,这样前后两次查看的结果集都是一样的,必会读到其他事务新插入的记录,这样就不会产生幻读的问题了。

针对当前读的话,靠行级锁中的间隙锁来实现的,在可重复读隔离级别下,第一个select for update语句查询的时候,会对记录加上next-key锁,这个锁包含间隙锁,这时候如果其他事务往这个间隙锁插入新的记录的话,都会被阻塞住,这样就不会产生幻读的问题了。

可重复读隔离界别下,MVCC完全解决了不可重复读的问题吗?

如果前后两次查询都是快照读的话,就是普通select的话,那么就不会产生不可重复读的额外难题。但是如果第一次查询的是快照读,第二次查询的当前读的话,那么就可能会发生不可重复读的的问题。

可重复读隔离级别下为什么不能完全解决幻读的问题?什么情况下会出现幻读的问题?

在可重复读级别场景下,当先快照读再进行当前读的场景下可能会出现幻读的问题。

解决方法:

在开启事务之后,马上执行select ... for update语句,他会对记录加上临键锁(next-key锁),这样就可以避免其他事务插入一条新纪录,避免了幻读的问题。

tewa-707e光猫超级密码获取方法 这款光猫很魔性,没有WIFI,没有USB接口,没有Telnet,试了很多方法去获取超级密码都不行。解密时可能会报错,可能是文件后面部分不晓得是咋拼接过来的,用AES解密时分组数据有问题。3、这个文件是用AES加密了的,直接打开是乱码,所以得用AES解密,key为16个字节的 x00。打开解出来的文件,然后搜索 telecomadmin,就可以发现超级密码了。参考资料里面的光猫不是同一款,但解密的方法基本相同的。 阅读详情

相关推荐

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

MySQL事务(超详细!!!)

假设事务A对某些行的内容作了更改,但是还未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,感觉出现了幻觉,这就叫幻读。一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。(1)read uncommitted( 读取尚未提交的数据 :不解决脏读,允许脏读,其他事务只要修改了数据未提交也能读取),即使未提交,本事务也能看到修改后的数据值。

weixin_58376680的博客 1万+

Matplotlib字体警告终结者:为什么总提示DejaVu Sans?5种场景解决方案大全

本文深入解析Matplotlib中常见的DejaVu Sans字体警告问题,并提供5种典型场景的完整解决方案。从理解字体系统的三层架构和缓存机制,到解决中文显示、远程服务器部署、TeX渲染、缓存优化及生产环境配置等实际问题,帮助开发者彻底摆脱字体警告困扰,实现稳定可靠的数据可视化。

view3的博客 502

MySql中的事务、MySql事务详解、MySql隔离级别

MySql中的事务、MySql事务详解、MySql隔离级别

weixin_49114503的博客 5258

手把手教你为RK3588开发板适配RTL8211F网卡:设备树配置与PHY驱动匹配全流程

本文详细介绍了在RK3588开发板上适配RTL8211F千兆以太网PHY芯片的全流程,包括硬件原理图确认、设备树配置与PHY驱动匹配。通过实战案例和调试技巧,帮助开发者解决常见问题并优化网络性能,适用于嵌入式Linux开发中的Ethernet网络功能实现。

weixin_29184075的博客 526

强化学习Q值迭代的几何视角:从策略区域到快速收敛

在强化学习中,Q值迭代是求解最优策略的核心算法,其理论基础建立在贝尔曼不动点定理之上。该算法通过迭代更新Q函数,使其逐步逼近最优值函数。从几何视角看,整个Q函数空间可被视为一个高维流形,每个Q函数对应流形上的一个点,而贝尔曼最优算子则定义了流形上的变换轨迹。理解这一几何结构,特别是由策略超平面划分出的凸多面体区域,对于分析算法的收敛行为至关重要。在实际工程中,传统Q值迭代可能在高维或稀疏奖励环境下收敛缓慢,甚至陷入策略高原。通过引入策略区域缓存与自适应学习率等几何启发方法,可以更高效地导航策略空间,加速策略

weixin_30444111的博客 319

MySQL 事务(详细版)

事务是一组操作的集合,它是一个不可分割的工作单位。当我们进行事务操作时,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。如果有一件事,例如上面的转账操作,必须三个步骤同时完成才可以,此时就需要将几条SQL语句作为一个事务,保证它们同时成功或同时失败不影响原来的数据。所以此时我们就要对事务进行控制,将几条SQL语句组合为一个事务。如果成功,就统一提交,如果失败,则避免影响数据库的内容。

2401_85409229的博客 4007

能量机关 STM32HAL库开发大疆A板WS2812B彩灯(PWM+DMA)

本文主要目的是为了制作RoboMaster比赛能量机关的灯条控制,模拟比赛场中大符,搭建出类似场地道具,以供视觉测试 使用的是RoboMaster开发板A型,芯片为STM32F427IIH6,使用的灯条为WS2812B。 采用PWM+DMA控制,使用CUBEMX配置底层,keil5编辑烧录代码 实现:一共五片扇叶,每片扇叶均实现流水灯+常亮颜色 参考文章在后面会标记出来

m0_51756449的博客 4291

MySQL事务

从上边的描述中我们可以看出来,所谓的MVCC(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SELECT操作时访问记录的版本链的过程,这样子可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。

weixin_55229531的博客 5万+

从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

最近,我有幸在工作中接触到了DeepSeek R1 671B模型,这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型,以其惊人的6710亿参数量和出色的推理性能,引起了业界广泛关注。作为一名AI基础设施工程师,我有机会在H20服务器上部署这个庞然大物,并对其进行了全面的压力测试。这篇文章将详细记录我的部署过程和性能测试方法,希望能为大家提供一些参考。💡为什么选择DeepSeek R1?超大规模参数量(671B)优秀的中英文理解能力开源可商用的许可证。

wangli的博客 1万+

fast-lio系列改进版本

2.回环检测的优化结果,更新到FAST-LIO2的当前帧位姿中,幷进行ikdtree的重构,进而更新submap。其它的效果还不清楚,实测lio部分稳定性很好。用fast-lio_slam就很稳定。融合了fast-lio2和sc-pgo,两部分分开运行,SC-PGO从FAST-LIO2节点获取里程计和激光雷达点云主题。的作者kim在FAST-LIO2的基础上,添加SC-PGO模块,通过加入ScanContext全局描述子,进行回环修正,SC-PGO模块与FAST-LIO2解耦,非常方便,很优秀的工作。

z1872385的博客 3189

MySQL中的事务

MySQL中的事务,包括redo日志、undo日志、MVCC机制和锁机制

qq_29259089的博客 1920

用miniconda建立PyTorch、Keras、TensorFlow三个环境

如果还没有安装Miniconda,请从[Miniconda官网](https://docs.conda.io/en/latest/miniconda.html)下载合适的版本并进行安装。如果遇到问题,可以通过编辑`~/.condarc`文件来临时禁用某个源,或者通过`conda config --remove channels`命令来移除配置的镜像源。要切换到不同的环境,先使用`conda deactivate`命令退出当前环境,再用`conda activate 环境名称`命令激活另一个环境。

数字人生 2464

MYSQL事务

事务(Transaction)是一组数据库操作的集合,这些操作要么全部执行成功,要么全部不执行。在MySQL中,事务确保了一组数据库操作的原子性,一致性,隔离性和持久性,简称ACID属性。原子性 (Atomicity):原子性指事务中的所有操作要么全部执行成功,要么全部不执行。即事务不可分割,事务中的操作要么全部完成,要么由于某种原因全部回滚。一致性 (Consistency):一致性确保事务开始前和结束后,数据库状态保持一致。事务执行过程中虽然数据库状态可能临时不一致,但最终状态必须符合预期约束。

eternal__day的博客 1170

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[MySQL]事务

事务是数据库中将一组SQL语句打包执行的机制,确保要么全部成功要么全部失败。具有ACID特性:原子性(整体执行)、一致性(数据正确)、隔离性(事务间独立)和持久性(持久保存)。

z141042的博客 1572

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL的事务与Spring的事务

MySQL系列文章总目录:关系型/非关系型【数据库】知识脉络 为什么MySQL要有事务? 一个数据库,一个表,十个人来查看,十个人来写数据,再来十个人删除数据。这一番操作下来,会有哪些可能性? 会有哪些可能性? 假如黄蓉郭靖分隔两地,又没有电话沟通(书信需要传一个月),恰巧又使用了没事物的银行数据库。 0. 两人都到银行先看了一眼存款:500银子! 黄蓉再存500银子,心想有1000银子,郭靖在天涯那边正取200银子,黄蓉存完一看,怎么...

披甲上战场的博客 2568

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mysql怎样开启事务_MySQL 如何使用事务

基础知识事务是指对一组 SQL 语句进行一个原子化的操作,即如果这一组 SQL 语句中有一条发生错误,那么其他的同组 SQL 就都不会被执行。你可以把它当作一个测试,当你执行完一组 SQL 语句后,可以查看一下结果是否正确,如果正确后可以选择提交,如果不正确则可以进行回滚,恢复到原本的状态。在 MySQL 中,所有的操作默认都是自动进行提交,当开启事务后则变为手动提交。基本使用单独开启单独开启是指...

weixin_30744725的博客 6268

【MySQL】事务

mysql是一个网络服务,这意味着在同一时刻可能有多个用户在并发访问或者操作这个数据库中的某些数据,如果不对这些操作进行控制的话有可能会造成并发访问导致数据不一致的问题,进而导致错误发生,因此针对这种并发访问的情况,数据库要通过事务等制来保证操作的正确性。

weixin_66672501的博客 1392

MySQL事务与Spring事务的关系

MySQL事务是数据库层面的原生事务机制,而Spring事务是应用层基于MySQL事务(或其他数据库事务)构建的声明式/编程式事务抽象,也就是说,Sprnig事务是 数据库事务在 Java框架层面的封装和增强,本质上还是依赖数据库的事务机制。 MySQL的事务模型:这篇文章的最后会说明使用Spring事务的3种方式(本质上就两种,声明式和编程式)下面给出一个例子,使用的是 Spring的声明式事务(@Transactional) 3. 两者关系详解 3.1 层级关系 3.2 Spring对MySQL事务

fupinghaohao的博客 1015

Mysql 事务与Spring事务

Mysql事务与Spring事务

test_test111的专栏 1523

MYSQL 事务

事务(Transaction)是指在数据库管理系统(DBMS)中作为单个逻辑工作单元执行的一系列操作。原子性(Atomicity):事务中的所有操作要么全部完成,要么全部回滚。原子性确保操作组作为一个整体被执行,避免部分成功、部分失败的情况。一致性(Consistency):事务开始前后,数据库的状态必须是一致的,即事务的执行不能破坏数据库的完整性约束。隔离性(Isolation):多个事务同时执行时,一个事务的执行不能被另一个事务看到,即事务之间相互独立。MySQL通过不同的隔离级别实现了隔离性。

Flying_Fish_roe的博客 648

MySQL事务详解

MySQL事务详解

靖节先生的博客 1046
上一篇: Spring中的AOP和IOC(八股文)
下一篇: MySQL的MVCC
crossaspeed
博客等级 码龄3年 101粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值