数据库锁全集

news2024/9/24 17:18:18
一、全局锁:

顾名思义,全局锁执行后,整个库都锁定。有读锁和写锁,加锁和解锁方式如下:
加锁:flush tables WITH READ LOCK;
解锁:UNLOCK TABLES;
使用场景:做全库的逻辑备份;

二、表级锁:

有读锁和写锁,加锁和解锁方式如下:

加锁:LOCK TABLES `role` READ;
解锁:UNLOCK TABLES;
使用场景:(1)读密集型;(2)写作不频繁的场景;(3)数据量不大的简单应用;(4)全表更新或者删除;

触发表锁的命令:(1)ALTER TABLE;(2)DROP TABLE 或者 TRUNCATE TABLE;(3)LOCK TABLES;(4)全表扫描或者大范围扫描;(5)加全局锁;

风险:(1)性能下降;(2)多表操作,如果没有按照一定顺序操作表,可能会导致死锁;

三、行级锁:

粒度上区分:共享锁和排他锁

主要由INNODB存储引擎提供,包含共享锁(读锁,也是S锁)和排他锁(写锁,也是X锁)。实际使用中,还有一种间隙锁,会锁定行锁前后的间隙,防止数据插入。

使用场景:(1)高并发读写操作;(2)单行操作;(3)短期锁;(4)实现并发控制;(5)复杂的事务处理;

触发表锁的命令:
(1)select ... for update:添加一个排他锁;
(2)select ... LOCK IN SHARE MODE:添加一个共享锁;
(3)INSERT、UPDATE、DELETE:添加排他锁;

风险:(1)死锁;(2)锁升级:事务锁定行过多,可能导致上升到表锁;(3)锁等待;(4)资源消耗;(5)难调试和排查;(6)事务隔离级别;

模式上区分:乐观锁和悲观锁

乐观锁:认为冲突概率低,操作数据时,不会锁定数据,只有在提交修改时,才检查。如果数据已被修改,则回滚,否则提交。

mysql并没有内置乐观锁机制,需要在代码中实现,常见的实现方式是,使用时间戳或者版本号字段,记录每一次对数据的修改。

标志SQL:(1)select id,version from .xxx ...;(2)update xxx set ... where ... and version = 旧version; 

乐观锁使用场景:(1)低冲突环境;(2)读多写少场景;(3)短事务操作;(4)分布式系统;(5)互联网应用;

风险:(1)冲突检测:只有提交时才检测,有冲突会导致所有都回滚;(2)依赖于版本管理;

悲观锁:一种并发控制方法。认为冲突概率高,每次读写前都加锁;

使用方式:参考前面提到的共享锁(S锁)和排他锁(X锁);

使用场景:(1)写操作比较多;(2)并发冲突高;(3)业务需要强一致性的场景;

缺点:(1)性能开销;(2)并发降低;(3)死锁;(4)锁超时;

四、意向锁

意向锁是表锁。为了协调行锁和表锁的关系,支持多粒度锁并存(即行锁和表锁)。

意向锁也分共享锁和排他锁。

作用:当事务A有行锁时,mysql自动给该表添加意向锁。当事务B申请整张表的写锁时,只需要判断是否存在意向锁,而不需要判断所有行锁。

意向锁的兼容互斥性:

意向共享锁(IS)意向排他锁(IX)
共享锁(S)兼容互斥
排他锁(X)互斥互斥

五、临键锁

可以理解为一种特殊的间隙锁,临键锁可以解决幻读的问题。

当事务拥有某一行记录的临键锁时,会锁住一段左开右闭的区间。比如后面截图中的3条数据,就生成了4个临键锁,临键锁如下:(1)(-∞,20];(2)(20, 25];(3)(25, 30];(4)(30, +∞];
当更新age=25的记录时,不能增加或者修改age为(25, 30]之间的数。

sql语句说明如图:
创建测试表,并插入相应数据,然后开启事务,并更新年龄为25的记录。

 

没有commit更新的情况下,新开一个窗口,执行插入语句,年龄在25-30之间,结果插入被阻塞,这就是因为临键锁。

 

六、记录锁

mysql的innodb引擎的一种锁定机制,用于锁定和控制单个行记录的访问。

记录锁作用在索引上,对于没有主键和唯一键的表,innodb会自动添加隐藏的聚簇索引,并在该索引上加锁。

七、间隙锁

where条件是一个范围时,数据库会锁定区间数据,主要是解决幻读问题。

使用场景:(1)防止幻读;(2)范围查询;

缺点:(1)性能影响;(2)死锁;(3)复杂性;(4)锁定范围过大,可能导致不必要的锁定冲突;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm中Terminal输入sqlite3,出现无法将sqlite项识别为cmdlet**的解决方法

前提:本机上已安装sqlite3,安装详见:pycharm社区版中安装配置sqlite3_Sunshine_0426的博客-CSDN博客 问题: cmd命令行中或pycharm中Terminal行输入sqlite3 db.sqlite3命令后,出现“无法将“sqlite3”项识别为 cmdlet…

伦敦银实时行情最新解读

在伦敦银市场上做交易,不管大家做的是长线、中线还是短线,都离不开对最新的实时行情走势进行解读。借助交易软件上一些常用的技术指标,伦敦银投资者可以从技术面增加自己的交易操作准确率。 Stochastic是相当常见而实用的技术指标&#xff0c…

vue点击鼠标生成24字社会主义核心价值观上浮特效

在app.vue中 <template><div id"app"><transition name"el-zoom-in-top" mode"out-in"><keep-alive :include"cacheviews"><!-- 一级路由 --><router-view ></router-view></keep-aliv…

【杂谈】关于Huawei S5720巡检过程中的“CPCAR_DROP_MPU”告警

背景 本年度二季度为某客户巡检数通设备&#xff08;Huawei居多&#xff09;时&#xff0c;在某楼宇汇聚设备上display logbuffer发现存在大量告警&#xff0c;如下&#xff1a; Jun 8 2023 15:34:24 AGG-S5720-1 %%01INFO/4/SUPPRESS_LOG(l)[58]:Last message repeated 2 t…

chatgpt赋能python:Python获取某个值的方法

Python获取某个值的方法 在Python编程中&#xff0c;有时候我们需要从数据集或者对象中获取某个特定的值&#xff0c;这时候我们可以使用Python提供的各种方法来实现。本文将介绍几种常见的方法&#xff0c;并且说明它们的优劣和使用场景。 使用索引获取值 在Python中&#…

dirsearch

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 介绍例如 安装使用场景01 XXX 介绍 dirsearch&#xff0c;是一个目录扫描工具&#xff0c;在目录扫描领域是一个强大的竞争对手&#xff0c;具有多线程、代理支持、…

MySQL数据库学习笔记一

MySQL优点 使用数据库&#xff1a; 使用show来显示存在的数据库、表、列 select语句 排序&#xff1a;Order by 降序排序&#xff1a; where语句 通配符&#xff1a;%&#xff0c;_ 正则表达式 正则表达式之 . 字符&#xff1a; Like和正则表达式regexp的区别 插入多行

ffmpeg学习日记121-视频-各种图片转yuv

Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 24/04/2023 Details:文章目录 实现功能查看转换结果参考 图片的解码方式和视频解码是一样的&#xff0c;因为视频是由一副一副的图片组成的&#xff0c;只不过视频的帧会前后参考&#xff0c;而图片是单独…

OCR本地搜题(无需网络)

1、先下载好所需要的软件 2、安装.NET&#xff08;必须&#xff0c;否则无法使用&#xff09; 安装步骤&#xff1a;全部默认。 3、找到ScreenshotsSearch下的狗头 4、界面如下 5、点击 题库后&#xff0c;先清空题库 6在点击下方用Excel打开题库&#xff08;选择好题库文件&a…

点击左侧 - 右侧页面对应刷新(iframe)

在工作方面的需求&#xff0c;需要实现点击左侧栏目&#xff0c;右侧的内容对应更改。 这里&#xff0c;我运用了iframe来实现这个功能&#xff01;&#xff08;布局的话,使用了flex弹性布局&#xff09; 完整效果图。 左侧导航显示代码&#xff1a; <div class"lef…

菜鸡shader:L4三色环境光原理妙用并在ue4中实现

三色环境光的拓展运用 我的上一篇博客写了关于三色环境光的原理&#xff0c;这次就来简单拓展一下。最重要的核心思想其实就是取法线向量的第二个分量&#xff0c;因为它控制方法是指向xz平面的上或者下。 所以这次要用这个原来来单独摘出上层环境光&#xff0c;乘上菲涅尔&a…

【Java项目 读写分离技术】

文章目录 Java项目 读写分离技术1 Mysql 主从复制1.1 介绍1.2 配置 2 读写分离实现2.1 背景2.2 Sharding-JDBC 介绍2.3 配置步骤 Java项目 读写分离技术 面对日益增加的系统访问量&#xff0c;数据库的吞吐量面临着巨大瓶颈。对于同一时刻有大量并发读操作和较少写操作类型的应…

el-date-picker设置今天之前的日期不可选

<el-date-pickerv-model"editForm.offlineTime"type"date"placeholder"选择日期"style"width: 150px":picker-options"{disabledDate: (time) >time.getTime() <new Date(new Date().setHours(0, 0, 0, 0))}">&…

GCDW云原生数据仓库获评“2023优秀科技成果奖”

5月26日&#xff0c;“2023中国国际大数据产业博览会”在贵阳盛大开幕&#xff0c;同日举行了“领先科技成果发布会”&#xff0c;来自国内外高校、科研机构、科技企业的357项优秀成果参与申报&#xff0c;代表了近年来国内外大数据领域最前沿的科技成果。“南大通用GCDW云原生…

原生JS实现图片裁剪功能(fixed布局)

功能介绍&#xff1a;图片通过原生input上传&#xff0c;使用canvas进行图片裁剪。 裁剪框限制不允许超出图片范围&#xff0c;图片限制了最大宽高&#xff08;自行修改要的尺寸&#xff09;&#xff0c;点击确认获取新的base64图片数据&#xff0c;大部分需求都是弹窗进行处理…

office word 2007

office word 2007 指数怎么写的

反AI来了…尼康的Natural Intelligence

a mutant_umbrella tree shaped like a nuclear bomb explosion,a photo-realism photograph, 4k, ultra realistic VS a mutant_umbrella tree shaped like a nuclear bomb explosion 尼康发起了一次名为&#xff1a;Natural Intelligence &#xff0c;“不要放弃现实世界”的…

机器学习之K-means聚类算法

目录 K-means聚类算法 算法流程 优点 缺点 随机点聚类 人脸聚类 旋转物体聚类 K-means聚类算法 K-means聚类算法是一种无监督的学习方法&#xff0c;通过对样本数据进行分组来发现数据内在的结构。K-means的基本思想是将n个实例分成k个簇&#xff0c;使得同一簇内数据相…

Java性能权威指南-总结18

Java性能权威指南-总结18 线程与同步的性能线程同步避免同步伪共享 线程与同步的性能 线程同步 避免同步 如果同步可以完全避免&#xff0c;那加锁的损失就不会影响应用的性能。 有两种一般性的方式可以应对。其一是在每个线程中使用不同的对象&#xff0c;这样访问对象时就…

Selenium教程__界面的刷新、后退、前进操作(4)

本文将介绍如何使用Selenium来实现界面的刷新、后退和前进操作&#xff0c;以便于测试、开发人员能够更好地控制和管理用户界面的交互行为。 通过学习本文内容&#xff0c;您将能够掌握Selenium中相关API的使用方法&#xff0c;并能够灵活地应用到您的项目中&#xff0c;从而提…