返回顶部
首页 > 资讯 > 数据库 >Mysql中的innoDB怎么解决幻读
  • 231
分享到

Mysql中的innoDB怎么解决幻读

2023-06-30 11:06:21 231人浏览 安东尼
摘要

本篇内容介绍了“Mysql中的innoDB怎么解决幻读”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Mysql的事务隔离级别这四种隔离级

本篇内容介绍了“Mysql中的innoDB怎么解决幻读”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.Mysql事务隔离级别

Mysql中的innoDB怎么解决幻读

这四种隔离级别,当存在多个事务并发冲突的时候,可能会出现脏读,不可重复读,幻读的一些问题,而innoDB在可重复读隔离级别模式下解决了幻读的一个问题,

2. 什么是幻读

幻读是指在同一个事务中,前后两次查询相同范围的时候得到的结果不一致

Mysql中的innoDB怎么解决幻读

如图,第一个事务里面,我们执行一个范围查询,这个时候满足条件的数据只有一条,而在第二个事务里面,它插入一行数据并且进行了提交,接着第一个事务再去查询的时候,得到的结果比第一次查询的结果多出来一条数据,注意第一个事务的第一次和第二次查询,都在同一个事物里面,所以,幻读会带来数据一致性的问题

3. InnoDB如何解决幻读的问题

InnoDB引入间隙next-key lock机制去解决幻读问题

Mysql中的innoDB怎么解决幻读

假如现在存在这样一个B+Tree的索引结构,这个结构有4个索引元素,分别是1,4,7,10 当我们通过主键索引查询一条记录,并且对这条记录通过for update加锁的时候

Mysql中的innoDB怎么解决幻读

这个时候会产生一个记录锁,也就是行锁,锁定id=1这个索引

Mysql中的innoDB怎么解决幻读

被锁定的记录在锁释放之前,其他事务无法对这一条记录做任何操作的,前面我们所过对幻读的定义,幻读是指在同一个事务中,前后两次查询相同范围的时候得到的结果不一致,注意这里敲掉的是范围查询,也就是说要解决幻读的问题,必须保证一个点

Mysql中的innoDB怎么解决幻读

就是如果一个事务通过这样一条语句进行锁定的时候,另外一个事务再执行

Mysql中的innoDB怎么解决幻读

这样一条insert语句需要被阻塞,直到前面获得所的事务被释放,所以在innonDB设计一种间隙锁,它的主要功能是锁定一定范围内的索引记录

Mysql中的innoDB怎么解决幻读

当对查询范围id > 4 and id < 7这个范围加锁的时候,会针对B+数中(4,7)这个开区间的范围加间隙锁,意味着在这种情况下其他事务对这个区间的数据进行插入更新删除都会被锁住,但是还有另外一种情况,比如像这样

Mysql中的innoDB怎么解决幻读

这条查询语句针对id > 4这个条件加锁,那么它需要锁定多个索引区间,所以这个情况下InnoDB引入一个叫next-key lock机制,next-key lock相当于间隙锁和记录锁的合集,记录锁锁定存在记录的行,间隙锁锁住的是记录行之间的间隙,而next-key lock锁住的是两者的和

Mysql中的innoDB怎么解决幻读

每个数据行非唯一的索引列,都会存在一把next-key lock,当某个事务持有这一行数据的next-key lock的时候,会锁住一段在左开右闭区间的数据,因此当通过id > 4这样一个范围加锁的时候,InnoDB会去加一个next-key lock锁,锁定的区间范围是(4,7 ](7,10 ](10,+♾️ ]。间隙锁next-key lock的区别是在加锁的范围,间隙锁锁定的是两个索引之间的间隙,而next-key lock会锁定多个索引区间,它包含记录锁间隙锁当我们使用范围查询不仅仅命中Record记录,还包含了Gap间隙的时候,在这种情况下使用的就是临键锁,也就是next-key lock它是mysql里面默认的行锁算法

“Mysql中的innoDB怎么解决幻读”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: Mysql中的innoDB怎么解决幻读

本文链接: https://lsjlt.com/news/328380.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mysql中的innoDB怎么解决幻读
    本篇内容介绍了“Mysql中的innoDB怎么解决幻读”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Mysql的事务隔离级别这四种隔离级...
    99+
    2023-06-30
  • innodb怎么解决幻读
    InnoDB通过使用多版本并发控制(MVCC)来解决幻读问题。幻读是指在同一事务中,前后两次查询的结果集不一致的情况。InnoDB通...
    99+
    2023-09-15
    innodb
  • Mysql中的innoDB如何解决幻读
    目录1.Mysql的事务隔离级别2. 什么是幻读3. InnoDB如何解决幻读的问题4. 总结1.Mysql的事务隔离级别 这四种隔离级别,当存在多个事务并发冲突的时候,可能会出现...
    99+
    2024-04-02
  • InnoDB怎么解决幻读问题
    这篇“InnoDB怎么解决幻读问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“InnoDB怎么解决幻读问题”文章吧。事务隔...
    99+
    2023-07-05
  • MySQL中怎么解决幻读
    本篇文章为大家展示了MySQL中怎么解决幻读,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一、什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致...
    99+
    2024-04-02
  • InnoDB解决幻读的方法详解
    目录前言事务隔离级别什么是幻读InnoDB 解决幻读方式总结前言 大部分人在日常的业务开发中,其实很少去关注数据库的事务相关问题,基本上都是 CURD 一把梭。正好最近在看 mysql 的相关基础知识,其中对于幻读问题之...
    99+
    2023-04-06
    innodb幻读 InnoDB如何解决幻读 mysql 解决幻读
  • mysql幻读怎么解决
    本篇内容介绍了“mysql幻读怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事务隔离级别(tx_isolation)mysql 有四...
    99+
    2023-07-02
  • MySQL中怎么解决幻读问题
    本篇文章给大家分享的是有关MySQL中怎么解决幻读问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、什么是幻读?  假设我们有表t结构如下,里面的初始数据行为:(0,0,0...
    99+
    2023-06-20
  • mysql怎么解决幻读问题
    MySQL可以通过以下几种方式解决幻读问题:1. 事务隔离级别:将事务的隔离级别设置为串行化(SERIALIZABLE)可以解决幻读...
    99+
    2023-08-23
    mysql
  • mysql中RR与幻读的问题怎么解决
    这篇“mysql中RR与幻读的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“m...
    99+
    2024-04-02
  • MySQL是怎么解决幻读问题的?
    前言   我们知道MySQL在可重复读隔离级别下别的事物提交的内容,是看不到的。而可提交隔离级别下是可以看到别的事务提交的。而如果我们的业务场景是在事物内同样的两个查询我们需要看到的数据都是一致的,不能被别的事物影响,就使用可重复读隔离...
    99+
    2014-10-24
    MySQL是怎么解决幻读问题的?
  • mysql中怎么使用MVCC来解决幻读
    在MySQL中,MVCC(Multi-Version Concurrency Control)是通过在内部保留数据的多个版本来实现并...
    99+
    2024-04-24
    mysql MVCC
  • MySQL解决幻读的方法
    这篇文章将为大家详细讲解有关MySQL解决幻读的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做...
    99+
    2024-04-02
  • mysql幻读是什么及怎么解决
    MySQL幻读是指在一个事务中,读取到了其他事务插入的新数据,导致前后两次查询结果不一致的现象。解决幻读的方法有以下几种:1. 采用...
    99+
    2023-10-23
    mysql
  • 如何解决mysql幻读
    mysql中出现幻读的两种解决方法多版本并发控制(MVCC)多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。事务每次取数据的时候都会取创建版本小于当前事务版本的数据,以及过期版本大于当前版本的数据。其原理时将历史数据存一份...
    99+
    2024-04-02
  • MySQL中的幻读
    一、什么是幻读 1.我们先来回顾一下MySQL中事务隔离级别 READ UNCOMMITTED :未提交读。READ COMMITTED :已提交读。REPEATABLE READ :可重复读。SER...
    99+
    2023-09-22
    mysql 数据库 java
  • MySQL中锁解决幻读问题的方法
    这篇文章主要介绍MySQL中锁解决幻读问题的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是锁锁是一种用于保证在并发场景下每个事务仍能以一致性的方式读取和修改数据的方式,当一...
    99+
    2024-04-02
  • 如何解决MySQL的幻读问题
    如何解决MySQL的幻读问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  1、MVCC快照,将历史数据存一份快照,在其...
    99+
    2024-04-02
  • MySQL如何解决幻读问题
    目录前言一、什么是幻读?二、幻读有什么问题?(1)需要单独解决(2)间隙锁引发的并发度三、如何解决幻读?三、总结前言   我们知道MySQL在可重复读隔离级别下别的事物提交的内容,是看不到的。而可提交隔离级别下是可以...
    99+
    2022-05-22
    MySQL 幻读
  • Mysql的可重复读解决了幻读问题吗
    针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很...
    99+
    2023-09-01
    mysql 数据库 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作