Mysql事务隔离级别

MySQL事务隔离级别 本文主要探讨MySQL事务隔离级别的使用,具体什么场景使用啥,实战验证出现的并发事务问题 阅读详情

事务:在数据库系统里而言,事务是代表一个或者一系列操作的最小逻辑单元,事务机制存在的目的就是无论我们的操作过程中是成功、失败、异常,或者是受到干扰的情况下,事务都能保证我们数据最终的一致性。“一致性”是事务的最终目的,原子性、隔离性、持久性其实都是为了实现一致性的手段”。


一、事务的基本要素(ACID)

  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

二、事务的并发问题

  1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

  小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

三、MySQL事务隔离级别

事务隔离级别脏读不可重复度幻读
读未提交(read-uncommitted)是是是
不可重复读(read-committed)否是是
可重复读(repeatable-read)否否是
串行化(serializable)否否否

四、分库分表

玩转MySQL:一站式解决分库分表后患问题方案-优快云博客

MySQL 常用分库分表方案,都在这里了!-优快云博客

补充:

  1、事务隔离级别为读提交时,写数据只会锁住相应的行

  2、事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

  3、事务隔离级别为串行化时,读写数据都会锁住整张表

   4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

   5、MYSQL MVCC实现机制参考链接:

数据库基础(四)Innodb MVCC实现原理 - 知乎

【MySQL笔记】正确的理解MySQL的MVCC及实现原理_SnailMann的博客-优快云博客_mysql的mvcc

6、关于next-key 锁可以参考链接:Mysql加锁过程详解(9)-innodb下的记录锁,间隙锁,next-key锁 - crazyYong - 博客园

转载来源:MySQL的四种事务隔离级别 - 花弄影 - 博客园

MySQL事务隔离级别详解 全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的 ACID 要求又有了提高。解决幻读的方式有很多,但是它们的核心思想就是一个事务在操作某张表数据的时候,另外一个事务不允许新增或者删除这张表中的数据了。从上面对 SQL 标准定义了四个隔离级别的介绍可以看出,标准的 SQL 隔离级别定义里,REPEATABLE-READ(可重复读)是不可以防止幻读的。还是刚才上面的读已提交的图,虽然避免了读未提交,但是却出现了,一个事务还没有结束,就发生了 不可重复读问题。并不会有任何性能损失。 阅读详情

相关推荐

深入解析MySQL事务隔离级别及其实现原理

在数据库管理系统中,事务(Transaction)是保证数据一致性的重要机制。而事务隔离级别则是决定多个事务之间如何相互影响的关键。MySQL作为常用的关系型数据库,其事务隔离级别和实现机制在许多业务场景中起着至关重要的作用。本文将详细介绍MySQL的事务隔离级别、常见问题及其底层实现原理,帮助读者更好地理解和应用事务。

fudaihb的博客 2425

事务

脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没...

zhangdonghang 469

Docker版OnlyOffice中文字体配置全攻略:从字号调整到字体添加

本文详细介绍了在Docker版OnlyOffice中配置中文字体和调整字号的完整方案。通过容器内操作和配置文件修改,实现中文标准字号映射及思源、阿里巴巴等优质字体的集成,提升文档排版的规范性和专业性。特别针对企业级部署提供了性能优化建议和常见问题解决方案。

weixin_28309571的博客 137

MYSQL数据库锁与数据隔离级别

本文摘自https://bbs.youkuaiyun.com/topics/300049690/中的回答 数据库锁 为什么引入数据库锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致 不可重复读 A用户读取数据,随后B用户读出该数据并修改,此时A用户再读

pyml_kdl的博客 589

51单片机-点亮LED和蜂鸣器

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。ULN2003是大电流驱动陈列,多用于单片机、只能仪表、PLC、数字量输出卡等控制电路中。可直接驱动蜂鸣器、继电器等负载。void delay(u16 i) // i等于1大约10uswhile(i--);//取反,高低电平不断变化,产生脉冲delay(10);// 周期200us。

三日沐水 1127

SNN系列|编码篇(2)时序编码

Tempotral Coding 选择编码方法是要根据编码对象以及模型如何处理编码信息进行选择,如下是一种时序信息的编码对比: Threshold-based encoding 又称为tempotral contrast,该方法可以用于编解码一段序列,当差值超过阈值时发放脉冲,阈值是根据编码的序列自适应变化的。 使用该编码方法时,实值序列最好是沿时间变化的,因为在根据差分决定是否发放脉冲后,脉冲的顺序与差分顺序有关。 Time-to-first spike coding 该编码方法将信息用神经元首次

Tianlong Lee的博客 1万+

彻底搞明白MySQL隔离级别

MySQL 的隔离级别决定了事务之间的隔离程度,以及在并发执行事务时可能出现的问题。了解不同的隔离级别及其特点,对于正确使用数据库事务非常重要。在选择隔离级别时,需要考虑并发程度、数据一致性要求和性能要求等因素,以选择最合适的隔离级别。

wu73guang5jian的博客 1790

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 161

mysql隔离级别

隔离级别,幻读

songtaiwu的博客 9164

基于simulink的电动汽车电机驱动系统IGBT开路故障检测

本文介绍了基于Simulink的电动汽车电机驱动系统IGBT开路故障检测方法。通过搭建永磁同步电机(PMSM)驱动系统模型,实现IGBT开路故障注入,并设计基于电流平均值与PWM逻辑比较的故障检测算法。系统可实时采集三相电流信号,通过MATLAB Function模块实现故障诊断,当检测到PWM信号与电流不匹配时输出故障报警。仿真结果显示,系统能在2.05秒内准确识别A相上管开路故障,并通过Scope和XYGraph直观展示故障特征。该方法为电动汽车电力电子系统故障诊断与容错控制提供了实用解决方案,后续可扩

xiaoheshang_123的博客 149

UG NX二次开发(C#)-VS2022配置NX二次开发模板不能正常显示的问题

随着VS2022的发布,使用VS2022进行UG NX二次开发的人员也会越来越多,但是由于VS2022和以前的VS版本采用代码结构不同,而UG NX的二次开发编程模板还没有适应于VS2022的模板配置,所以不能正常的创建一个完整的工程。本文采用曲线救国的方式来实现VS2022下的UG NX二次开发。如果有读者能很好的解决模板配置,不吝赐教。

GimiGimmy 4275

MySQL事务隔离级别详解(全网最详细)

在关系型数据库中,事务隔离级别是指多个并发事务之间的隔离程度MySQL 中事务的隔离级别一共分为四种,分别如下READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。REPEATABLE-READ(可重复读)

qq_53868937的博客 1万+

青岛鼎信Java开发面试题及参考答案(3万字长文,多张原理图)

MySQL 的事务特性有哪些? MySQL 事务具有四个重要特性,被称为 ACID 特性。 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么全部执行,要么全部不执行。例如,在银行转账场景中,从账户 A 转账到账户 B,包括扣减账户 A 的金额和增加账户 B 的金额这两个操作必须作为一个整体来完成。如果在执行过程中发生错误,比如系统崩溃或者数据库出现故障,那么已经执行的部分必须全部回滚,就好像整个转账操作从未发生过一样。 一致性(Consistency):事务必须

大模型大数据攻城狮的专栏 1089

【MySql】MySql事务及隔离级别

MySql事务隔离级别

酷酷的馫博客 1万+

一种白平衡增益计算中白点权重计算简易实现方式

一种白平衡白点距离权重简易实现方式

大熊 384

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL 事务四大特性和事务隔离级别

MySQL 事务具有四个特性:原子性、一致性、隔离性、持久性,这四个特性简称 ACID 特性一、原子性(Atomicity ):一个事务是一个不可再分割的整体,要么全部成功,要么全部失败事务在数据库中就是一个基本的工作单位,事务中包含的逻辑操作(SQL 语句),只有两种情况:成功和失败。事务的原子性其实指的就是这个逻辑操作过程具有原子性,不会出现有的逻辑操作成功,有的逻辑操作失败这种情况二、一致性(Consistency ):一个事务可以让数据从一种一致状态切换到另一种一致性状态举例说明:张三给李四转账 1

辰风沐阳 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【MySQL事务】事务的隔离级别

正在进行中且尚未提交。

2301_80224556的博客 2120

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL中的事务隔离级别有哪些

可能发生脏读、不可重复读、幻读,性能最高但安全性最低。:防止脏读,但可能发生不可重复读和幻读。REPEATABLE READ(MySQL 默认):防止脏读和不可重复读,MySQL 还能避免幻读,适用于大多数高并发业务。:所有并发问题都能避免,但性能最差。MySQL 默认采用,主要是因为 MySQL 通过MVCC解决了大部分的并发问题,既能保持较高的事务隔离级别,又不会影响太多的性能。读未提交(Read Uncommitted)该级别允许事务读取其他事务尚未提交的数据(脏读)。

Weiki的博客 5118

mysql事务隔离级别

隔离级别 MySQL是一个服务器/客户端架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session)。我们可以同时在不同的会话里输入各种语句,这些语句可以作为事务的一部分进行处理。不同的会话可以同时发送请求,也就是说服务器可能同时在处理多个事务,这样子就会导致不同的事务可能同时访问到相同的记录。我们前边说过事务有一个特性称之为...

laozhang0910的博客 8296

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

思考:我去银行给朋友汇款,我卡上有100元,朋友卡上50元,我给朋友转账50元,如果我的钱刚扣,而朋友的钱又没加时,网线断了, 怎么办(Transaction)是数据库管理系统(DBMS)中的一个核心概念,它确保了一系列数据库操作要么全部成功,要么全部失败,从而维护数据库的完整性和一致性。MySQL在5.5版本开始,就将InnoDB引擎作为默认存储引擎。由于Mysql中的事务是存储引擎实现,而且只有InnoDB支持事务。

m0_74825526的博客 1113

【MySQL进阶之路】事务的隔离级别

其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低,往往需要在两者之间找一个平 衡点。不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增:同样的条件, 第1次和第2次读出来的记录数不一样说明: mysql 默认的隔离级别是可重复读,一般情况下不要修改 上面的例子可以看出,事务也有长短事务这样的概念。事务间互相影响,指的是事务在并行执行的 时候,即都没有commit的时候,影响会比较大。隔离级别描述可能出现的问题。

2301_79796701的博客 2090

MySQL 事务隔离级别_mysql事务隔离级别最高

❝如果隔离级别为序列化,则用户之间通过一个接一个顺序地执行当前的事务,这种隔离级别提供了事务之间最大限度的隔离。❝在可重复读在这一隔离级别上,事务不会被看成是一个序列。不过,当前正在执行事务的变化仍然不能被外部看到,也就是说,如果用户在另外一个事务中执行同条 SELECT 语句数次,结果总是相同的。(因为正在执行的事务所产生的数据变化不能被外部看到)。❝READ COMMITTED 隔离级别的安全性比 REPEATABLE READ 隔离级别的安全性要差。

2501_90392009的博客 1669

MySql事务隔离级别

序列化可重复读提交读未提交读幻读:两个事务,当事务A(READ COMMITTED 事务任意都行),事务B(REPEATABLE READ) ,当事务A提交执行了开始事务操作,但是未对数据进行操作;事务B此时也同步开启了事务,但是只是查询了一下数据;而事务A在此时对数据进行了操作,并提交了。在事务B中还是读取之前的数据,导致在操作数据的时候出现了异常现象;这个就好理解了,当事务AREAD COMMITTED,事务B(事务任意都行);当事务A开始事务之后,查询了数据;

qq_43070052的博客 971

MySQL的事务隔离级别

事务隔离级别是数据库中确保数据一致性和完整性的关键要素。从最宽松的"读未提交"到最严格的"串行化",每个隔离级别都有其独特的特点和优劣势。"读未提交"允许脏数据读取,但性能较高,适用于不要求数据完整性的场景。"读已提交"解决了脏读问题,但仍可能出现不可重复读。"可重复读"提供更高程度的隔离,避免了不可重复读问题,但仍可能发生幻读。而"串行化"则是最高级别,绝对确保数据的完整性,但可能带来性能开销。选择适当的隔离级别应根据应用需求权衡数据一致性与性能,确保数据库操作正确且数据完整。

m0_62468521的博客 2385
上一篇: Mysql查询和索引
下一篇: Redis
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值