mysql-Innodb锁相关内容

1、InnoDB存储引擎包含的锁类型

  • 共享锁(S锁)和排他锁(X锁)
  • 意向锁
  • 记录锁
  • 间隙锁
  • Next-key锁
  • 插入意向锁
  • Auto-INC 锁
  • 空间索引的谓词锁

2、共享锁(S锁)和排他锁(X锁)-- 锁定数据行

共享锁(S锁)和排他锁(X锁),均为**行级别锁定**。
  • 共享锁:允许持有锁的事务读取某一行;
  • 排他锁:允许持有锁的事务更新或者删除一行;

3、意向锁 – 锁定数据表

1) InnoDB 支持多粒度的锁定,允许行锁表锁共存。为了实现多粒度锁定,使用了意向锁。

2)意向锁是表级锁,指示事务稍后需要对表中的行使用哪种类型的锁(共享S锁或者排他X锁)。

3)意向锁的分类

  • 意向共享锁(IS锁):IS 表示事务打算在表中的个别行上设置 S 锁;

  • 意向排他锁(IX锁):IX 表示事务打算在表中的个别行上设置 X 锁;

    例如:SELECT … FOR SHARE设置一个IS锁, SELECT … FOR UPDATE设置一个IX锁。

4)在事务可以获得表中某一行上的共享锁之前,它必须首先获得 IS 表级锁
在事务可以获得表中某一行上的排他锁之前,它必须首先获得 IX 表级锁

5)表级锁类型兼容如下
在这里插入图片描述

  • 如果请求的事务与现有锁兼容,则授予该锁;
  • 如果请求的事务与现有锁冲突,当前事务将等待,直到冲突的锁被释放。同时,锁请求与现有锁出现冲突,导致死锁而无法授权;

4、记录锁 – 锁定索引

记录锁是对索引记录的锁定。例如:SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; 阻止任何其他事务插入、更新或删除值为 的 t.c1行 10

5、间隙锁 – 锁定数据间隙

间隙锁是锁定索引记录之前的间隙,也可以锁定当前索引记录之前或者之后的间隙。例如1:SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;  该语句将会在 10~20的范围内添加间隙锁,
阻止新的数据插入到间隙中。例如2:SELECT * FROM child WHERE id = 100;
分析a:如果列 id 具有唯一索引,则仅仅会添加索引记录锁,仅锁定当前数据行;
分析b:如果列 id 没有索引或者具有非唯一索引,则会添加间隙锁,锁定数据行前面的间隙;

6、Next-key锁 = 记录锁 + 间隙锁(两者的组合)

Next-key锁 = 索引记录锁 + 索引记录前面间隙上的间隙锁。使用 Next-key锁进行搜索和索引扫描,
可以防止出现幻读数据。

7、插入意向锁(目的是提前锁定数据插入的间隙)

当执行 insert 操作的时候,当前事务会获取插入意向锁(特殊的间隙锁),同时等待获取独占 X 锁。

8、AUTO-INC锁【表级锁】

当数据主键列使用 AUTO_INCREMENT ,在执行  insert 操作的时候,系统会申请获取 **AUTO-INC 表级锁**。在最简单
的情况下,如果一个事务正向表中插入值,则任何其他事务都必须等待才能执行自己的操作,以便第一个事务插入的行能
够接收连续的主键值。关注:innodb_autoinc_lock_mode 变量控制用于自动增量锁定的算法

9 、空间索引的谓词锁

为了支持带空间索引的表的隔离级别,InnDB 使用谓词锁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458801.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Git进行团队协作开发

使用Git进行团队协作开发 Git简介 安装Git 在Windows上安装Git 在macOS上安装Git 在Linux上安装Git 设置Git用户信息 创建Git仓库 基本Git命令 添加文件 提交更改 查看状态 克隆仓库 推送更改 获取更改 分支管理 创建分支 切换分支 合并分支 删除分支 解决合并冲突 检查冲突…

docker安装、设置非sudo执行、卸载

安装 sudo snap install docker 设置docker非sudo执行 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock 卸载docker 1.删除docker及安装时自动安装的所有包 apt-get autoremove docker docker-ce docker-…

数据结构_二叉树

二叉树的性质 满二叉树 完全二叉树 完全二叉树的特点 二叉树的存储结构 顺序存储 链式存储 二叉链表 三叉链表 二叉树遍历算法 先序遍历 先序遍历:ABDC 中序遍历 后序遍历 层次遍历

Win11安装基于WSL2的Ubuntu

1. 概述 趁着还没有完全忘记,详细记录一下在Win11下安装基于WSL2的Ubuntu的详细过程。不得不说WSL2现在被微软开发的比较强大了,还是很值得安装和使用的,笔者就通过WSL2安装的Ubuntu成功搭建了ROS环境。 2. 详论 2.1 子系统安装 在Win11搜…

Unity编辑器 连接不到SteamVR问题记录

问题表现:之前正常的工程,某天打开后运行,在SteamVR未打开时,Unity工程运行后无法调用起来Steam VR,无任何反应,但用其他软件则可以调用起来SteamVR,并且运行正常,在重装了XR的一些插…

nfs作业

nfs作业 服务机: 编写配置文件: [rootlocalhost ~]# vim /etc/exports 配置文件内容: /nfs/shared *(ro,sync) /nfs/upload 192.168.36.0/24(rw,anonuid210,anongid210,sync) /home/tom 192.168.36.132(rw) 创建目录,文件&am…

qt QMainWindow详解

一、概述 QMainWindow继承自QWidget,并提供了一个预定义的布局,将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。这些区域共同构成了一个功能丰富的主窗口,使得应用程序的开发更加简单和高效。 二、QMainWindow的常用组件及功能 菜单栏&…

Leetcode11:盛水最多的容器

原题地址:. - 力扣(LeetCode) 题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳…

【每日一题】LeetCode - 判断回文数

今天我们来看一道经典的回文数题目,给定一个整数 x ,判断它是否是回文整数。如果 x 是一个回文数,则返回 true,否则返回 false。 回文数 是指从左往右读和从右往左读都相同的整数。例如,121 是回文,而 123 …

Maven 项目管理工具

目录 Maven简介 Maven快速上手 Maven详细介绍 Maven工作机制 Maven安装及配置 使用IDEA创建Maven Web工程 Maven简介 Maven是 Apache 开源组织奉献的一个开源项目,可以翻译为“专家”或“内行”。 Maven 的本质是一个项目管理工具,将项目开发和管…

Tangible Software Solutions 出品最准确可靠的源代码转换器

Tangible Software Solutions 出品最准确可靠的源代码转换器 简介1、Instant C#(VB.NET to C#)2、Instant VB(C# to VB.NET)3、C to C# Converter4、C to Java Converter5、C to Python Converter6、Java to C# Converter7、Java to C Converter8、Java to Python Converter9、…

首届The VRAnimation Award 震撼启幕!VsoCloud独家赞助此次大赛!

CG行业的精英与爱好者们,你们的舞台已经搭好!备受瞩目的首届The VR & Animation Award现已正式拉开帷幕,诚邀各位共襄盛举!丰厚大奖、作品曝光、行业资源分享……多重惊喜等你来解锁! 此次大赛由Rival Technologie…

生产工单系统如何帮助企业控制成本?

我们都知道,在现在竞争日益激烈的市场环境中,企业对于成本控制的需求达到了前所未有的高度。每一分成本的优化,都直接关系到企业的盈利能力和市场竞争力。成本贯穿于生产、销售、管理等各个环节。其中,生产环节的成本控制更是关键…

【瑞吉外卖】-day01

目录 前言 第一天项目启动 获取资料 创建项目 ​编辑 连接本地数据库 连接数据库 修改用户名和密码 ​编辑创建表 创建启动类来进行测试 导入前端页面 创建项目所需目录 检查登录功能 登录界面 登录成功 登录失败 代码 退出功能 易错点 前言 尝试一下企业级项…

2024.10.25 软考学习笔记(知识点)

刷题网站: 软考中级软件设计师在线试题、软考解析及答案-51CTO题库-软考在线做题备考工具

map 和 set 的使用

文章目录 一.序列式容器和关联式容器二. set 系列的使用1. set 和 multiset 参考文档2. set 类介绍3. set 的构造和迭代器4. set 的增删查5. insert 和迭代器遍历使用样例6. find 和 erase 使用样例7. multiset 和 set 的差异 三. map 系列的使用1. map 和 multimap参考文档2. …

【Spring】Spring Boot 日志(8)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 1、日志概述 1.1学习日志的必要性 在第一次学习编程语言的时候,我们就在使用printf或者System.out.println等打印语句打印日志了…

Python超轻量对话框:easyGUI

文章目录 简介box回调函数 简介 EasyGUI是一个非常简单的GUI模块,提供了许多对话框,所有交互操作都通过简单的函数调用实现。支持pip安装,十分便捷 pip install easygui通过一行代码,即可实现下面的对话框 其对应的代码为 impo…

ArrayList和Array、LinkedList、Vector 间的区别

一、ArrayList 和 Array 的区别 ArrayList 内部基于动态数组实现,比 Array(静态数组) 使用起来更加灵活: ArrayList 会根据实际存储的元素动态地扩容或缩容,而 Array 被创建之后就不能改变它的长度了。ArrayList 允许…

雷池社区版OPEN API使用教程

OPEN API使用教程 新版本接口支持API Token鉴权 接口文档官方没有提供,有需要可以自行爬取,爬了几个,其实也很方便 使用条件 需要使用默认的 admin 用户登录才可见此功能版本需要 > 6.6.0 使用方法 1.在系统管理创建API TOKEN 2.发…