mysql 事务的四种隔离级别


 

我们知道事务有四种特性

 

(1)原子性:一个事务被视为不可分割的一个单位

 

(2)隔离性:事务之间隔离开来,一个事务所做的修改,未提交之前另一个事务是不可见的

 

(3)永久性:事务的更改是永久的

 

(4)一致性:数据库总是从一个一致性的状态转换到另外一个一致性的状态中

 

 

 

在此之前,我们来学习一下mysql 如何设置隔离级别

 

SELECT@@global.tx_isolation;

 

SELECT@@session.tx_isolation;

 

SELECT@@tx_isolation;

 

set tx_isolation = 'read-uncommited';设置默认隔离级别

 

1、默认:下一个事务开始

 

2、session:当前链接

 

3、global:从此开始,全局都是

 

隔离级别:

 

(1)Read Uncommited(读未提交):发生脏读

 

 客户端A

 

开始状态:

 




 
 

 

客户端B

 

 

2、客户端A开始事务,但是没有提交,客户端B可以看到

 

1)、客户端A的状态:

 




 
 

 

 

 

客户端B的状态:

 

 

 




 
 

 

 

 

2)开始事务,并在客户端改变值

 




 
 

 

 

 

3)这时候查看客户端B,可以看到变化,这就是脏读现象

 




 
 

 

 

 

(2)Read Committed (读提交):容易发生“不可重复读”

 

1、首先先改变两边的状态

 

客户端A:

 

 

 

 

 




 
 

 

 

 

客户端B:

 




 
 

 

2、客户端A开始事务,客户端B也开始事务

 

 

 




 
 

 

3、这时候A更新一条记录,并且提交完毕,B未提交事务,又读了一次,这时候,两次读的数据不一致,导致了不可重复读

 

 

 

客户端A

 

 

 




 
 

 

 

 

客户端B:

 





 
 
 

 

 

 

简单的来说

 

客户端A

客户端B

事务开始

事务开始

 

读字段name为lin

更新字段name=qin

 

提交事务

 

 

读字段name为qin,两次读都不一致

 

提交事务

 

 

 

 

 

(3)Repeatable Read(可重复读):幻读现象

 

简单的用表格表示下:

 

客户端A

客户端B

事务开始

事务开始

读name=lin

 

 

更新name=qin

 

Commit提交事务

读name还是为lin

事务2开始

 

插入一条数据

 

 

 

 

 

 

 

1、         改变事务隔离级别

 





 
 
 

 

2、     客户端B改变并且提交

 





 
 
 

 

 

 

3、     客户端A两次读都未发生不可重复读现象

 

 

 

 

 




 
 

 

 

 

4、         客户端B插入一条记录(还未提交)

 




 
 

 

 

 

5、         查看客户端A未发生变化,这时候客户端B提交

 




 
 

 

 

 

6、         再次查看客户端A的数据,还是没有发生任何问题

 

 

 



 

 

 

 

所以mysql到了repeatable read级别之后,没有出现任何问题

 

这是因为innoDB存储引擎通过MVCC(多版本控制)解决了幻读的问题。

 

【数据库的四种隔离级别】 阅读详情

相关推荐

/lib//libclntsh.so: file format not recognized; treating as linker script

centos7.7+oracle19.3 建库过程报错:预检查都是通过的 /oracle/product/19.3.0/db_1/lib/libasmperl19.a -Wl,--no-whole-archive -lclntsh -lclntshcore -lasmclntsh19 -lhasgen19 -lskgxp19 -locr19 -lcell19 -lirc INFO: /usr/bin/ld:/home/app/oracle/product/19.3.0/db_1/li...

sqlora的专栏 9914

数据库事务的四种隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted(读未提交) 、Read committed (读已提交)、Repeatable read (重复读)、Serializable (序列化)。读现象是在多个事务并发执行时,在读取数据方面可能碰到的问题。包括脏读、不可重复读、幻读。脏读:读到了脏数据,即无效数据。不可重复读:是指在数据库访问中,一个事务内的两个相同查询却返回了不同数据。幻读:指同一个事务内多次查询返回的结果集不一样,比如增加了行记录。

bug世界 6万+

AI辅助专利撰写实战:30分钟高效产出发明专利初稿

在技术创新的浪潮中,专利撰写常常是开发者将创意转化为知识产权保护壁垒的关键一步,但这个过程往往耗时费力,需要兼顾技术深度与法律文书规范。近期,借助AI辅助工具来提升专利撰写效率已成为一个热门探索方向。本文将围绕如何利用AI工具,在30分钟内高效完成一篇具备授权潜力的发明专利初稿,进行一场从0到1的实战演练。无论你是独立开发者、初创团队的技术负责人,还是希望保护自己研究成果的学生,这套方法都能帮助你快速梳理技术方案,形成结构严谨、逻辑清晰的专利申请文档。 1. 背景与核心概念:AI辅助专利撰写的价值与边界 在

weixin_34253126的博客 495

数据库事务的 4 种隔离级别

数据库事务的隔离级别指的是多个事务并发执行时,数据库系统应该如何保证事务之间的隔离程度。不同的隔离级别具有不同的并发控制策略,从而影响了事务的隔离性、性能和并发度。常见的隔离级别有读未提交、读已提交、可重复读和串行化。

qq_45110186的博客 5404

CCSP考后复盘:那些刷题时感觉良好,考场却发懵的题目到底长什么样?

本文深入分析了CCSP考试中常见的题目陷阱和解题策略,揭示了刷题与实战的差距。通过解析换装题、双胞胎选项和场景题等典型题型,帮助考生掌握拆题技巧和思维模式转变,提升应对CCSP考试的能力。

weixin_30485379的博客 438

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 321

MySQL 四种事务隔离级别详解介绍

参考文章:面试问烂的 MySQL 四种隔离级别,看完吊打面试官! 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。另外,这篇分布式事务不理解?一次给你讲清楚!推荐大家阅读。 事务的 ACID 事务具有四个特征:原子性( Ato

justlpf的专栏 2万+

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 287

MySQL的四种事务隔离级别

脏读 时间线 事务A 事务B 1 select age from user wehre id = 1;(查询结果:18) update user set age = 20 where id = 20 2 3 4 5 6 7

云丶言的博客 5340

图形学基础知识:着色(三)Rendering Pipeline与Shader

管线(Pipeline) 什么是管线? 管线我们可以理解为流水线,流水线大家都懂,就是工厂里面生产东西的一整套流程。例如饮料厂要生产饮料,需要洗瓶子,倒饮料,加盖,包装等等,这一整套过程就是流水线。那么我们要把一个三维场景渲染成一幅二维的图像,同样需要一个先干嘛再干嘛然后干嘛最后干嘛的过程,这个过程或流水线,我们就称之为管线。 实时渲染管线(Real-time Rendering Pipeline) 通过前面几篇的学习,我们知道了要把一个三维场景渲染成一幅二维的图像大致分为以下几个步骤: M.

王王王渣渣的博客 2533

数字逻辑Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 6(step by step)

第六章6-1~6-42习题详解,缺少6-39和6-40

weixin_62651190的博客 1468

列举MySQL的四种事务隔离级别

MySQL的四种事务隔离级别 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成...

u011277123的博客 1121

matlab处理las点云(1)——las/laz格式解析【2024最新版】

matlab中的las/laz格式解析。博客长期更新,本文最近一次更新时间为:2024年11月9日。

点云侠的博客 8460

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

【MySQL】MySQL的四种事务隔离级别 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事务的基本要素(ACID) ...

coco3600的博客 3856

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL 的四种事务隔离级别

MySQL 的事务隔离级别主要用于控制不同事务之间的可见性,防止数据不一致问题。

qq_45638953的博客 1020

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

mysql的四种事务隔离级别

一、事务的四个特性 在介绍mysql的四种隔离级别之前,我们首先要对事务有一个基本的了解。 事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 (1)原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 (2)一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处

weixin_48016395的博客 1万+

MySQL事务支持的四种隔离级别

MySQL提供四种事务隔离级别,平衡数据一致性与性能:READ UNCOMMITTED(可能脏读)、READ COMMITTED(避免脏读但存在不可重复读)、REPEATABLE READ(默认级别,通过MVCC和间隙锁避免脏读和不可重复读,基本解决幻读)、SERIALIZABLE(完全串行化)。MySQL的REPEATABLE READ采用多版本并发控制和Next-Key锁机制,比其他数据库更高效地处理幻读问题,适合大多数业务场景。开发者应根据业务需求选择,通常优先使用默认级别,仅在极端情况下才考虑SER

Made In SQL 1256

MySQL数据库事务的四种隔离级别

事务具有ACID属性,而事务的隔离级别可以不同程度的解决事务并发时可能产生的问题,可以根据不同业务逻辑需求,来选择不同的事务隔离等级,事务隔离等级越高,越能保证数据的一致性,但就更趋近于串行化,降低并发性能,导致效率变低。读未提交(RU)在这种隔离级别下,脏读、幻读、不可重复读都不能解决读已提交(RC)在这种隔离级别下,解决了脏读。可重复读(RR)在这种隔离级别下,解决了脏读、不可重复读。序列化/串行化(在这种隔离级别下,解决了脏读、幻读、不可重复读。

m0_73613990的博客 1474

mysql的事务及四种事务隔离级别

1.什么是事务 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本信息,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID):

wjw_de_java的博客 551

MySQL InnoDB 四种事务隔离级别

InnoDB默认是可重复读的(REPEATABLE READ)修改全局默认的事务级别,在my.inf文件的[mysqld]节里类似如下设置该选项(不推荐)transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE}改变单个会话或者所有新进连接的隔离级别(推荐使用)SET [SE

chengshiep的专栏 1万+
上一篇: 浅析JVM
下一篇: 浅析myisam存储引擎
iteye_2113
博客等级 码龄8年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值