MVCC和间隙锁,面试官的问法

你在项目中用到事务了吗,如果你对表中的数据进行了两次操作,

1 更新表中的数据 成功

2 删除表中的数据 失败

那么请问 你更新能成功吗。

菜鸡本菜的回答:事务的原子性 导致不会成功。

大佬说(非面试官):这个应该是面试官要问你间隙锁。  通过版本号来标记,不存在删除数据的操作,只是版本号无效。

理论:

MVCC和间隙锁

多版本并发控制(Multi-VersionConcurrency Control,Mvcc)是mysql的InnoDb存储引擎实现隔离级别的一种具体的方式,

用于实现读已提交和可重复读这两种隔离级别。读未提交总是读取最新的数据行,无需使用MVCC。可串行化隔离级别需要

对所有的行都加锁,仅仅依赖MVCC是无法实现的。

MVCC可以认为是行级锁的一个变种,但是他在很多情况下都避免了加锁操作,因此开销更低。

InnoDb的版本号是乐观并发控制,每行数据存在一个版本号,每次更新数据都更新该版本号,修改时copy出当前版本。随意修改,各个

事务之间互不干扰,保存时比较版本号,如果版本号一致则commit,不一致就rollback。MVCC在每行记录后面都隐藏着两个列,用来存储

两个版本号,创建版本号和删除版本号。

查询(select):InnoDb只会查找系统版本号小于或者等于当前事务的版本号并且删除版本号未定义或者大于当前事务的版本号的行,这样可以确保读取的

行要么是在事物开始前就已经存在的,要么是事务本身插入修改的,且在事务开始前未被删除。

更新(update):将当前系统的版本号当做数据行的删除版本还,并且将当前系统版本号作为修改后数据行的创建版本号(拗口)

MVCC不能解决幻读问题,在可重复读的隔离级别下,使用MVCC+Next-Key Locks可以解决幻读的问题。

Next-KeyLocks是InnoDB行锁和间隙锁的默认组合。间隙锁是在锁定索引记录见习,确保索引记录的间隙不变。

Next-KeyLocks当对数据进行条件范围检索的时候,对其范围内存在的值进行加锁,防止其他事务的插入操作来达到防止幻影读的目的。

原文地址:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11651348.html

时间: 2024-11-07 07:59:06

MVCC和间隙锁,面试官的问法的相关文章

【深度】扒开V8引擎的源码,我找到了你们想要的前端算法(下次面试官再问算法,用它怼回去!)

算法对于前端工程师来说总有一层神秘色彩,这篇文章通过解读V8源码,带你探索`Array.prototype.sort`函数下的算法实现. 来,先把你用过的和听说过的排序算法都列出来: * 快速排序 * 冒泡排序 * 插入排序 * 归并排序 * 堆排序 * 希尔排序 * 选择排序 * 计数排序 * 桶排序 * 基数排序 * ... 答题环节到了, sort 函数使用的以上哪一种算法? 如果你在网上搜索过关于 sort 源码的文章,可能会告诉你数组长度小于10用插入排序,否则用快速排序. 开始我也是

如果大厂面试官突然问你FactoryBean+Bean你究竟会多少?

如果大厂面试官突然问你FactoryBean+Bean你究竟会多少? 很多Java程序员都在绞尽脑汁的想要进互联网大厂,那进入大厂必备的条件也是大家最想知道的,有很多大厂在面试的过程中会提一些不那么常见的问题,所以我们在去大厂面试的时候就需要提前做好准备. 如果大厂面试官突然问你FactoryBean+Bean你会怎么回答呢? package com.example.demo10.entity; //实体 public class Stu { String name; public Stu(St

面试官一问一答的面试题

1,请问你平常用什么浏览器调试? 谷歌,火狐 ,偶尔调试的时候用IE  偶尔会使用下国产的浏览器 问:请说下火狐浏览器,360的浏览器的内核   没听错就是360浏览器 IE浏览器内核:Trident内核,也是俗称的IE内核:Chrome浏览器内核:统称为Chromium内核或Chrome内核,以前是Webkit内核,现在是Blink内核:Firefox浏览器内核:Gecko内核,俗称Firefox内核:Safari浏览器内核:Webkit内核:Opera浏览器内核:最初是自己的Presto内核

面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希望对你有所帮助~ 目录 本篇文章主要包括以下内容: HashMap 的存储结构 常用变量说明,如加载因子等 HashMap 的四个构造函数 tableSizeFor()方法及作用 put()方法详解 hash()方法,以及避免哈希碰撞的原理 resize()扩容机制及原理 get()方法 为什么HashMap链表会

以后面试官再问你三次握手和四次挥手,直接把这一篇文章丢给他

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题.很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了. 见过比较典型的面试场景是这样的: 面试官:请介绍下三次握手 求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了. 面试官:然后呢? 求职者:这就是三次握手的过程,很简单的. 面试官:...... (番外篇:

面试官初问之装饰器

对于装饰器在Python中的应用,实在是数不胜数,在面试的问题中也是拷问的必备项,那么要如何回答这个问题才能算得上是完美的回答呢?装饰器就是验证登录的,在你进入这个view之前我先验证你是不是登录的状态.OK,这个回答没有问题,但是你也被OUT了,简单的了解与使用是初级程序员常常犯的错误,面试官显然是要你造火箭的能力啊!兄弟!! 所谓的装饰器仅仅是一种语法糖,可作用的对象可以是函数也可以是类,装饰器本身就是一个函数,其主要的工作方式就是将被装饰的类或者函数作为参数传递给装饰器函数,最简单的装饰器

【架构师技巧分享】程序员面试美团:面试官突然问Java “锁”你应该怎么回答?

Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景. Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识.下面给出本文内容的总体分类目录: 1.乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度.在Java和数据库中都有此概念对应

我说精通字符串,面试官竟然问我 Java 中的 String 有没有长度限制?

String 是 Java 中很重要的一个数据类型,除了基本数据类型以外,String 是被使用的最广泛的了,但是,关于 String,其实还是有很多东西容易被忽略的. 就如本文我们要讨论的问题:Java 中的 String 有没有长度限制? 这个问题要分两个阶段看,分别是编译期和运行期.不同的时期限制不一样. 01 编译期 首先,我们先来合理的推断一下,当我们在代码中使用 String s = ""; 的形式来定义 String 对象的时候,"" 中字符的个数有没

哪些问题是面试官经常问Java工程师的问题 ? --- 转自quora

Which are the frequently asked interview questions for Java Engineers ? Vivek Vermani, www.buggybread.com | Programme... (more) 265 upvotes by Ridox Liu, Shivani Sahni Vermani, Viet Thang, (more) Java的基础知识   For a Core Java Developer , Questions arou