InnoDB的锁

自增锁

自增锁是一种特殊的表级别锁(table-level lock),专门针对事务插入 AUTO_INCREMENT 类型的列。最简单的情况,如果一个事务正在往表中插入记录,所有其他事务的插入必须等待,以便第一个事务插入的行,是连续的主键值

查询当前数据库的自增锁模式:

show variables like '%innodb_autoinc_lock_mode%';

共享锁和排它锁

共享锁

共享锁(Shared Locks)简称为 S 锁。读取数据时候可以加 S 锁

共享 (S) 锁允许并发事务读取 (SELECT) 一个资源。资源上存在共享 (S) 锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享 (S) 锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享 (S) 锁。

排它锁

排它锁 (Exclusive Locks)简称为 X 锁。修改数据时候加 X 锁
排它 (X) 锁可以防止并发事务对资源进行访问。其它事务不能读取或修改排它 (X) 锁锁定的数据。

共享锁之间可以并行,排它锁和共享锁之间互斥,也就是说只要共享锁开启没有释放掉的时候,更新锁是不能抢占的,此时其他读取同资源的操作可以进行读取不受限制;同理排它锁开启时候只要没有释放其他不管是排它锁还是共享锁都不可以抢占资源直到锁释放。

读资源的时候大家一起读没问题,影响不了什么,

但是我读的时候,你不能修改呀,这样我不就读到错的了吗,所以读的时候不许修改,

那我在修改的时候,你也不许读啊,谁知道你会不会读到错的呢,所以修改的时候不能读。

意向锁(Intention Locks; table-level lock)

意向锁是一种特殊的表级锁,意向锁是为了让 InnoDB 多粒度的锁能共存而设计的。取得行的共享锁和排他锁之前需要先取得表的意向共享锁(IS)和意向排他锁(IX),意向共享锁和意向排他锁都是系统自动添加和自动释放的,整个过程无需人工干预。

意向共享锁(Intention Shared Lock) IS

事务有意向对表中的某些行加共享锁(S锁)

意向排它锁(Intention Exclusive Lock)IX

事务有意向对表中的某些行加排他锁(X锁)

举例

-- 要设置 IS 锁 --
-- 事务要获取某些行的 S 锁,必须先获得表的 IS 锁。
select * from A where id = 1 lock in share mode;
-- 要设置 IX 锁 --
-- 事务要获取某些行的 X 锁,必须先获得表的 IX 锁。
select * from A where id > 0 for update;

看上面那个例子,如果示例 1 和 2 都开启了事务,事务 1 锁住了表 A 的其中 id=1 的一行,事务 2 要获取整个表的更新锁需要进行判断

step1:判断表 A 是否有表级锁

step2:判断表 A 每一行是否有行级锁

当数据量庞大的时候 step2 这种判断十分低效,于是就有意向锁协议

意向锁协议:

事务要获取表 A 某些行的 S 锁必须要获取表 A 的 IS 锁

事务要获取表 A 某些行的 X 锁必须要获取表 A 的 IX 锁

这时候 step2 就改变成了对意向锁的判断

step2:发现表 A 有 IS 锁,说明表 A 肯定有行级的 S 锁,因此,事务 B 申请写锁阻塞等待,判断效率极大提高

记录锁

SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; 这一行则是使用了记录锁,不允许其他事务进行增,删,改

但是 SELECT c1 FROM t WHERE c1 = 10; 是没有锁的,走的是快照读

记录锁本身不是锁定记录数据本身而是锁定索引记录,如果要锁的列没有索引,则会进行全表记录加锁

间隙锁

比如 SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;

插入 c1 为 15 的记录会被锁定不可执行

这种默认存在于可重复读的事务隔离级别中的锁,锁定被圈定的范围不允许 insert,防止不可重复读,上文说了我们的事务隔离级别都是读已提交,默认会产生不可重复读的问题

临键锁

在这里插入图片描述
在这里插入图片描述

插入意向锁

在这里插入图片描述
参考文章:[https://www.cnblogs.com/detectiveHLH/p/14805898.html]

btw,lintcode的锁讲的和史一样

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析师的最佳拍档:三款数据可视化工具的优劣比较

作为一名数据分析师,数据可视化已经成为我工作中不可或缺的一部分。为了更好地完成工作,我尝试使用了多款数据可视化工具,其中三款比较突出,分别是Tableau、Power BI和山海鲸可视化。下面,我将从自己的使用体验出发&am…

手机传输数据到电脑该怎么操作?安卓、苹果都可以这样操作

安卓手机 你知道安卓手机传输数据到电脑的方法有哪些吗?下面我们就一起来看一看可以使用的一些方法。 采用 USB 数据线 这个方法应该是我们生活中较为常见的方法了,我们只需要使用手机的充电线,将其连接到电脑上,然后手机可能会…

新媒体营销仿真实训室解决方案

1. 背景: 随着新媒体的兴起,学校需要培养学生在新媒体领域的实际操作能力,提高他们的综合素质。因此,建设一套仿真实训系统,让学生能够在真实场景中学习和实践新媒体营销技能势在必行。 2. 实训平台概述:…

PyQt6 QComboBox下拉组合框控件

​锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计34条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…

Ribbon-IRule 修改负载均衡的规则

1、负载均衡规则描述 (1)整体关系 (2)规则描述 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下&…

【MATLAB源码-第92期】基于simulink的QPSK调制解调仿真,采用相干解调对比原始信号和解调信号。

操作环境: MATLAB 2022a 1、算法描述 QPSK,有时也称作四位元PSK、四相位PSK、4-PSK,在坐标图上看是圆上四个对称的点。通过四个相位,QPSK可以编码2位元符号。图中采用格雷码来达到最小位元错误率(BER) —…

java开发之个微机器人的实现

简要描述: 二次登录 请求URL: http://域名地址/secondLogin 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wcId…

【导航控制器总结-导航控制器栈 Objective-C语言】

一、导航控制器总结 1.我们接着上一堂课的内容继续 我们上节课说到哪里了,是不是就是对这个导航控制器的一个总结啊 然后,使用的注意事项 2.导航控制器使用注意事项: 1)第一点,使用导航控制器,你在创建的时候,需要给它指定一个根控制器 创建导航控制器的同时,指定…

多多情报通:助力拼多多商家选品运营的数据分析工具

多多情报通(原名多多参谋)是一款专为拼多多商家设计的数据分析工具,旨在帮助商家进行选品、运营优化和提高销售业绩。通过多多情报通,商家可以更好地了解市场趋势、消费者需求和竞争对手状况,从而制定有效的运营策略。…

电脑发生0x80070002错误,0x80070002错误代码怎么解决

电脑发生0x80070002错误代码是一个常见的问题,它通常与Windows更新或系统文件损坏有关。当你的电脑出现这个错误代码时,在使用电脑时可能会受到影响,因为这可能意味着系统无法正常更新或运行。几天的这篇文章将和大家聊聊0x80070002错误代码怎…

无公网IP环境固定地址远程SSH访问本地树莓派Raspberry Pi

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…

vue学习笔记(九)——Vue-Router(路由系统)

一、Vue路由简介和基础使用 1.1 生活中的路由 设备和ip的映射关系 1.2 nodejs路由 接口和服务的 映射 关系 1.3 前端路由 路径和组件的 映射 关系 1. 路由是什么呢? 路由是一种映射关系 2. Vue中的路由是什么? 路径和组件的映射关系 1.4 为何使用路由 目标&#xf…

Qt内存泄漏工具vld使用

安装vld 下载并安装vld Github镜像站-GitHub - KindDragon/vld: Visual Leak Detector for Visual C 2008-2015 我安装在d盘的,如下图所示 拷贝文件 复制三个文件夹到工程目录的vld下 pro文件添加 win32: LIBS -L$$PWD/vld/lib/Win32/ -lvld INCLUDEPATH $$P…

EG网关串口连接力控ForceControl7.2软件应用案例

EG网关串口连接力控ForceControl7.2软件应用案例 前言:力控ForceControl软件广泛应于工业控制领域,是一款性能高,运行稳定的工业组态软件。此次我们要把力控ForceControl软件通过Modbus协议连接到EMCP设备管理云平台,实现电脑Web页…

Python中format函数用法

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 format优点 format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点。 1.不需要理会数据类型的问题&#…

UE5 树叶飘落 学习笔记

一个Plane是由两个三角形构成的,所以World Position Offset,只会从中间这条线折叠 所有材质 这里前几篇博客有说这种逻辑,就是做一个对称的渐变数值 这里用粒子的A值来做树叶折叠的程度,当然你也可以用Dynamic Param 这样就可以让…

ai学习之快捷键介绍

ai2021学习之快捷键介绍 F 全屏Ctr Y ,可以在去色和全色中切换。Shift O 画板工具CtrlALTY 将矢量图转为位图。Ctrl R 可以显示标尺, CTRL冒号(:;) 隐藏参考线智能参考线CTRLshirtz 撤回撤回的撤回 Ai是一个…

Google AdMob是什么,效果如何

Google AdMob是一种移动广告平台,主要表示在帮助开发人员在移动应用程序中获利。AdMob于2006年成立,后被谷歌收购。它为开发人员提供了一种简单而有效的方式来在他们的应用程序中显示广告,并从中获得收益。 AdMob的工作原理如下:开…

可试玩广告——为app广告变现带来高收益

可试玩广告具有强烈的互动性,使用户能够试用应用程序的主要功能或者是游戏的核心玩法。 试玩广告为提供受众创造了身临其境的体验。当用户接触了广告试玩后,他们对游戏建立了明确的期待,如果他们想要继续体验,便自然会安装下载。…