概述MySQL事务隔离级别类型

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

MySQL中锁的类型

表锁

      顾名思义,也就是每次对一张表进行操作的时候会锁住整张表,这样加锁的速度更快,但是加锁的粒度太大,发生锁冲突的概率回很高,所以表锁的并发效率不高

如何给表加锁以及差查那些表已经被上锁:

lock table 表名称 read(write),表名称2 read(write)--加锁
unlock tables; --解锁
show open tables; --查看被加锁的表

表锁的特性:

  • 如果加的是读锁,那么会阻塞其他事务的更新、插入操作,但是不会阻塞读取
  • 如果加的是写锁,无论什么操作都是会阻塞,直到另一个事务解锁,才会执行后面的事务语句
     很重要的一点是 MyISAM存储引擎 在执行查询语句的时候会自动给涉及到的表加读锁,增删改操作会给表加写锁。

行锁

    行锁就是锁住表中某一行数据,相比于表锁他的开销大,效率也稍微弱一点,但是锁的粒度小,相对的并发度也很高

InnoDB和MyISAM存储引擎最大的区别就是:InnoDB支持行锁和事务,这两点MyISAM是没有的。

行锁事务属性

  1. 原子性(Atomicity)
    也就是在一个事务中的一组SQL语句要一起执行完或者都失败,它们是一个整体,强调动作
  2. 一致性(Consistent)
    在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的,强调动作之后的结果
  3. 隔离性(Isolation)
    数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的。简单说每个事务都是不能被其他事务影响。
  4. 持久性(Durable)
    事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持

 

那么在并发场景下会出现那些事务问题

  1. 更新丢失
    在两个事务A、B读取数据库的时候,都读取到初始值,A事务先更新,B事务后更新,这时候B事务就会将A事务更新的结果覆盖掉
  2. 脏读
    同样是两个事务,A事务在对数据做更新的时候并未提交数据,这时候B事务读取到了A未提交的数据,这种情况下一旦事务A回滚事务,那么B事务的数据就变成了脏数据。
  3. 不可重读
    A事务在读取数据后的某个时间,重新读取了这条数据,但是这条数据已经被其他数据修改了,但是这时候A事务还没结束,这就不符合事务的隔离性,这就是不可重读的问题,简单说就是读取到了其他事务已经提交的更新操作
  4. 幻读
    一个事务使用一条查询语句重新查询时发现两次的结果不一致,因为其他事务在这个条件中插入了数据, 也就是说事务A读取到了事务B提交的新增数据,同样也是不符合隔离性

 

MySQL的事务隔离级别

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

 

    表中横排是可能出现的事务问题,竖排是MySQL存在是隔离级别,因为对于重读的问题,最大只能支持到已提交的更新,也就是说:可重读的事务隔离级别下是不会出现读取到其他事务中已经提交更新的数据。因为幻读是一个特殊的情况 他是已提交的插入操作,只有串行化才能解决,但是一旦用了串行话MySQ的性能就相对没有可重读那样高。综合考虑一般情况下都是使用可重读的事务隔离级别

查看当前数据库的事务隔离级别: show variables like 'tx_isolation';
设置事务隔离级别:set tx_isolation='REPEATABLE-READ';

可重复读的验证

1、开启事务START TRANSACTION,并查询当前表中数据

  1. 打开另一个客户端开启事务,更新表并提交:
update account set balance = balance - 50 where id = 2

   客户端B已经查询到更新后的数据是:850

 

这时客户端B的数据已经更新,但是客户端A再次查询是没有查询到更新后的数据

那么这时候在客户端A操作更新语句会是什么情况?是850吗?

update account set balance = balance - 50 where id = 2

按照实际操作来看,在更新的时候没有变成900-50 = 850,而是读取到了事务B已经提交的结果。这样数据一致性的机制没有被破坏。

【MySQL】MySQL事务基础概述与隔离级别 在数据库管理系统中,事务是一组原子性的操作,要么全部执行成功,要么全部失败。MySQL事务的四个基本特性,即ACID(原子性、一致性、隔离性、持久性),对于数据的可靠性和完整性至关重要。在数据库管理系统中,事务是一系列操作的集合,这些操作要么全部执行成功,要么全部失败。原子性(Atomicity):事务是原子的,要么全部执行成功,要么全部失败。一致性(Consistency):事务执行前后数据库必须保持一致状态。隔离性(Isolation):事务的执行不受其他事务的影响。 阅读详情

相关推荐

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

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

fudaihb的博客 2425

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

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

pyml_kdl的博客 590

从零到一:手把手教你用STM32F103C8T6打造个人专属开发板(附立创EDA工程与源码)

本文详细介绍了如何使用STM32F103C8T6微控制器从零开始设计和制作个人专属开发板。内容涵盖硬件选型、原理图设计、PCB布局、功能验证等全流程,并提供了立创EDA工程文件和源码,帮助开发者深入理解STM32开发板的硬件架构与设计要点。

weixin_26802933的博客 286

mysql 数据库的四种隔离级别

mysql数据库的四种隔离级别

蜗牛的专栏 3662

40岁从智驾转具身智能之路

我的工作经历比较复杂,本科毕业后工作2年再次读研的,本科和硕士都是机械专业,硕士毕业后干了5年CAM和机器人再转入到自动驾驶行业。在自动驾驶干了8年,发现自动驾驶已经到了一个瓶颈,再次转行做具身智能。我就谈谈自己的最近这次转型之路。

hzm8341的博客 641

SEW MDX61B 变频器调试说明

可手动自由更改时间和地址,时间一般不更改,IP地址使用网络适配器地址(Network adapter),点击进入即可。进入网络适配器(Network adapter)后,选择适配器建议地址,点击OK,更改IP地址后点击OK。点击加载配置文件(Load a configuration),加载已保存的应用模块配置文件, 或者点击“next”,开始重新配置AMA0801模块。满足安全回路后,控制模式选为寻参模式(Reference mode),选中开始(start),即可将机械零点设置为电气零点。

xdpcxq的专栏 4316

一文彻底搞懂MySQL中事务的五种分类

事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全部成功完成,要么全部失败回滚,从而保证数据库操作一致性和完整性的重要机制,它确保了数据库在并发环境下的正确性和可靠性。

永远在路上 3073

Penpot自托管全攻略:5分钟搞定私有化部署(附Docker配置详解)

本文详细介绍了Penpot开源原型设计工具的私有化部署全流程,从Docker基础配置到企业级优化方案。通过分步指南和实战技巧,帮助设计团队快速搭建安全高效的自托管环境,实现数据自主可控。内容涵盖LDAP集成、性能监控、备份策略等关键企业需求,是Penpot私有化部署的完整参考手册。

sugar的博客 1135

【MySQL】黑悟空都掌握的技能,数据库隔离级别全攻略

本文以《黑神话:悟空》为切入点,深入解析了数据库事务隔离级别的核心概念,包括读未提交、读已提交、可重复读和串行化四种级别,并通过图表直观对比了它们之间的差异及可能产生的问题如脏读、不可重复读和幻读。文章详细介绍了如何在MySQL中设置这些隔离级别,包括全局和会话级别的设置方法,并通过实操案例展示了不同隔离级别下事务间的交互表现,帮助读者理解各种隔离级别的实际应用场景及优缺点,从而更好地掌握事务隔离级别的选择与应用,提高数据库应用程序的一致性和性能。

JavaDog程序狗 1961

全球首发48V架构的Cybertruck,到底牛在哪?| 深扒特斯拉高压系统架构

特斯拉Cybertruck作为全球首款标配48V架构的量产车,在电气系统架构上进行了多项创新。首先,它采用以太网连接高压控制器与后域控制器,提升了数据传输效率和智能化水平。其次,Cybertruck引入了Pyro烟火断开装置,用于碰撞时快速断开电池连接,提高安全性。在电流监测方面,特斯拉既保留了传统的Shunt分流器技术,又引入了更先进的磁通门电流传感器,后者具有无温漂、完全隔离等优势。48V供电系统在降低电流损耗方面表现优异,但也面临电弧风险、盐水腐蚀等挑战。Cybertruck的48V系统通过PCS供电

weixin_43199439的博客 1351

【超详细】计算机组成原理总结及思维导图

计算机组成 第一章 计算机系统概论 冯诺依曼型计算机特点 1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成 2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示。 3.指令由操作码和地址码组成 4.指令在存储器中按执行顺序存放,由指令计数器(即程序计数器PC)指明要执行的指令所在的储存单元地址,一般按顺序递增,但可按运算结果或外界条件而改变 5.机器以运...

圣三一 10万+

MySQL数据库隔离级别

读已提交(READ COMMITTED):允许读取已提交的事务修改的数据,可以避免脏读,但可能产生不可重复读(non-repeatable read)的问题。可重复读(REPEATABLE READ):保证同一事务中多次读取的数据是一致的,避免不可重复读的问题,但不能避免幻读(phantom read)的问题。读未提交(READ UNCOMMITTED):是最低的事务隔离级别,允许读取未提交的事务修改的数据,可能导致脏读(dirty read)。

dxn16638400024的博客 654

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

​ 五点 TIP5P 刚性水模型通过添加两个通常无质量的附加位点 L 来扩展three-point TIP3P model,其中放置与氧原子相关的电荷。这些位点 L 位于距氧原子固定距离处,形成从 HOH 平面旋转 90 度的四面角。因此,这些位点在某种程度上近似于氧的孤对,从而改善了水结构,与four-point TIP4P model相比变得更加“四面体”。

荷塘阅色 1421

MySQL事务总结

MySQL事务总结操作数据过程中可能出现的问题查看MySQL的默认配置支持的存储引擎默认事务隔离级别当前会话的事务隔离级别默认autocommit为什么MySQL不会出现两类“更新丢失”问题简单总结四种隔离级别读未提交读已提交可重复读序列化(串行化)参考文章 操作数据过程中可能出现的问题 第一类更新丢失:覆盖丢失。A事务修改,B事务修改,B事务提交,A事务提交。 第二类更新丢失:回滚丢失。A事务修改,B事务修改,B事务提交,A事务回滚。 脏读:读到了无效数据(已回滚的数据)。 不可重复读:在一个事务中,两

半生浮名只是虚妄的博客 1448

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5295

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MySQL事务隔离级别详解

一、什么是事务? 事务是逻辑上的一组操作,要么全执行,要么全不执行。 事务最经典栗子也经常被拿出来的栗子就是银行转账了。比如小明要给小红转账1000元,这个转账会涉及到两个关键操作:将小明的余额减1000元,将小红的余额减1000元。万一这两个操作之间突然出现错误,导致小明余额减少但是小红余额没有增加,这种情况是肯定不允许的。事务就是保证这两个关键操作要么都成功,要么都不成功。 二、事务的特性(ACID) **原子性:**事务最小的执行单位,不允许分割。事务的原子性确保动作要么全部执行,要么全部不执行。

qq_34222160的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

辰风沐阳 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【MySql】MySql事务及隔离级别

MySql事务隔离级别

酷酷的馫博客 1万+

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

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

Weiki的博客 5119

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

正在进行中且尚未提交。

2301_80224556的博客 2120

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

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

2301_79796701的博客 2090

mysql事务隔离级别

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

laozhang0910的博客 8296

MySQL事务大揭秘:事务概述和隔离级别解析

事务的特征、生命周期、执行过程。 MySQL事务的ACID特性。 事务的隔离级别以及不同隔离级别并发异常(脏读、不可重复读、幻读以及它们的区别)。

Lion_Long的博客 5511

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

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

2501_90392009的博客 1669
下一篇: MySQL执行计划介绍
王大zhuang
博客等级 码龄11年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值