mysql有哪些锁,理解各种表锁和行锁

全局锁

主要用于数据库的备份,但会使得备份期间不能有任何事务插入删除更新数据,这很影响实际业务。所以通常不用这个全局锁来完成数据库的备份。假设数据库的存储引擎支持可重复读,那么常见的方法是通过MVCC来实现的,也就是备份事务开始时候创建一个read view,然后根据这个read view来备份,这样不影响其他事务的更新。

表级锁

表锁

基本不用,太拉了。共享锁(读锁)和独占锁(写锁),一个事务申请了表锁,不仅限制别的事务读写,还会限制自己的读写。

元数据锁(MDL)

不需要显式的加MDL,会自动加:

  • 对一张表进行 CRUD 操作时,加的是 MDL 读锁;
  • 对一张表做结构变更操作的时候,加的是 MDL 写锁;
    主要目的是防止
    用户对表执行 CRUD 操作时,防止其他线程对这个表结构做了变更。

当有线程在执行 select 语句( 加 MDL 读锁)的期间,如果有其他线程要更改该表的结构( 申请 MDL 写锁),那么将会被阻塞,直到执行完 select 语句( 释放 MDL 读锁)。

反之,当有线程对表结构进行变更( 加 MDL 写锁)的期间,如果有其他线程执行了 CRUD 操作( 申请 MDL 读锁),那么就会被阻塞,直到表结构变更完成( 释放 MDL 写锁)。
MDL 是在事务提交后才会释放,这意味着事务执行期间,MDL 是一直持有的。这也就意味着假设A事务读表,B事务可以读,但C事务想改就不行会被阻塞,此后DEF事务想读都不行了,因为C要写而且排在他们前面。数据库线程会很快爆满。

意向锁

意向锁是指有事务想修改或者读取表的某一部分,会先加个意向锁然后再加行锁。实际上用意向锁就是告诉后续有事务想申请表级独占锁(X,写锁)或者共享锁(S,读锁),不行,这里有人在用。当然了,行锁和表锁还是满足读读共享、读写互斥、写写互斥的。
在这里插入图片描述

AUTO-INC锁

表里的主键通常是自增的。插入时候不显式赋值,主键也能完成自增,靠的就是这个AUTO-INC锁。锁的释放不是事务终止才释放的,是插入完成后就释放。但这样不同事务在插入数据时候会相互阻塞。所以不太合适。因此innoDB引入了一种轻量级锁innodb_autoinc_lock_mode,在插入时候,自增字段赋值结束后就释放锁,而不用等到语句整个插入完。
在这里插入图片描述
当 innodb_autoinc_lock_mode = 2 是性能最高的方式,但是当搭配 binlog 的日志格式是 statement 一起使用的时候,在「主从复制的场景」中会发生数据不一致的问题。看下面例子。
在这里插入图片描述
session B 先插入了两个记录,(1,1,1)、(2,2,2);
然后,session A 来申请自增 id 得到 id=3,插入了(3,5,5);
之后,session B 继续执行,插入两条记录 (4,3,3)、 (5,4,4)。
可以看到,session B 的 insert 语句,生成的 id 不连续。

当「主库」发生了这种情况,binlog 面对 t2 表的更新只会记录这两个 session 的 insert 语句,如果 binlog_format=statement,记录的语句就是原始语句。记录的顺序要么先记 session A 的 insert 语句,要么先记 session B 的 insert 语句。

但不论是哪一种,这个 binlog 拿去「从库」执行,这时从库是按「顺序」执行语句的,只有当执行完一条 SQL 语句后,才会执行下一条 SQL。因此,在从库上「不会」发生像主库那样两个 session 「同时」执行向表 t2 中插入数据的场景。所以,在备库上执行了 session B 的 insert 语句,生成的结果里面,id 都是连续的。这时,主从库就发生了数据不一致。

要解决这问题,binlog 日志格式要设置为 row,这样在 binlog 里面记录的是主库分配的自增值,到备库执行的时候,主库的自增值是什么,从库的自增值就是什么。

所以,当 innodb_autoinc_lock_mode = 2 时,并且 binlog_format = row,既能提升并发性,又不会出现数据一致性问题。

行级锁

innoDB独有的额,MyISAM没有
在这里插入图片描述

Record Lock

记录锁、行锁,也就是仅仅把一条记录锁上。主要是对删除和修改的限制。

  • 当一个事务对一条记录加了 S 型记录锁后,其他事务也可以继续对该记录加 S 型记录锁(S 型与 S 锁兼容),但是不可以对该记录加 X型记录锁(S 型与 X 锁不兼容);
  • 当一个事务对一条记录加了 X 型记录锁后,其他事务既不可以对该记录加 S 型记录锁(S 型与 X
    锁不兼容),也不可以对该记录加 X 型记录锁(X 型与 X 锁不兼容)。

Gap Lock

间隙锁,锁定一个范围,但是不包含记录本身。主要是对插入的限制,用于解决幻读。
间隙锁虽然存在 X 型间隙锁和 S 型间隙锁,但是并没有什么区别,间隙锁之间是兼容的,即两个事务可以同时持有包含共同间隙范围的间隙锁,并不存在互斥关系,因为间隙锁的目的是防止插入幻影记录而提出的。

Next-Key Lock

record lock + gap lock,锁定一个范围,并且锁定记录本身。(x, y]区间内既不能插入也不能删除修改。

插入意向锁

和意向锁名字很像,但是行级别的锁。A事务间隙锁上了一个区间,B事务想在区间内插入一行数据,就会先申请一个插入意向锁。表明有事务想在某个区间插入新记录,但是现在处于等待状态。但注意A和B不能是同一事务。

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

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

相关文章

解决ant-design-vue中Select组件v-model值为空字符串不显示placeholder的bug

方法一: 1.找到node_modules/ant-design-vue/es/vc-select/SingleSelector.js文件 搜索renderPlacehoder方法 将其修改为 const renderPlacehoder () > {const list props.values.filter(val > val.value ! );if (list[0]) {return null}... }2.在此文件中…

ROS2教程05 ROS2服务

ROS2服务 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds all right…

Dockerfile脚本编写流程及示例

学习dockerfile指令 Dockerfile 指令 说明 FROM 指定基础镜像 MAINTAINER 声明镜像的维护者 LABEL 添加元数据标签 RUN 在容器中执行命令 CMD 容器启动后默认执行的命令 EXPOSE 暴露容器的端口 ENV 设置环境变量 ADD 将文件、目录或远程文件添加到容器中 COP…

Maxwell学习笔记

1 概述 Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台…

InnoDB的锁

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

arcgis投影栅格不可用

1、使用【投影栅格】工具进行栅格数据投影转换时报错。 解决方法:如果使用的是arcgis10.5及以下的版本,则需要更换更高的版本,因为这个是软件问题,需要更换到arcgis10.6及以上版本,更高级别的版本已经修复了这个问题。…

优酷新国风动漫《师兄啊师兄 第二季》强势定档 看李长寿稳健归来!

看新国风,上优酷动漫!由优酷出品,玄机科技制作,改编自阅文集团旗下起点读书小说《我师兄实在太稳健了》(作者:言归正传)的修仙喜剧动画《师兄啊师兄》第二季《海神扬名篇》今日正式官宣定档&…

HCIP —— 重发布

目录 路由重发布背景: 路由重发布的作用: ​编辑 部署条件: 1.必须存在ASBR设备 2.需要关注种子度量值 重发布的规则 重发布的名词 重发布的方向性问题(单向/双向) 重发布的ASBR数量问题 单点---只存在一个AS…

陀螺仪防抖术语

陀螺仪防抖术语 fov 视场角 drift 零偏   MotionFusion即运动传感器的融合补偿,对陀螺仪、加速度计等运动测量器件的数据 进行预处理,通过标定和补偿,为防抖提供校准后的陀螺仪数据 ratio 系数 gyro 陀螺仪 calibration 校准 标定 DIS&…

实力出圈,开源网安连续4年入选中国网络安全企业100强

近日,安全牛第十一版《中国网络安全企业100强》正式发布。开源网安突出的综合实力、技术创新能力,以及前沿技术的落地应用成果,再次受到权威认可,从数百家安全厂商中脱颖而出,连续多年上榜百强榜单。 《中国网络安全企…

2023年个人工作总结怎么写?工作任务完成自动记录的待办软件

2023年已经接近尾声,不少人已经开始期待新的一年到来了。不过对于大多数职场人士来说,最近还有一项让人头疼的任务需要完成,这就是撰写2023年个人工作总结。 那么年度个人工作总结怎么写呢?其实很简单,年度工作总结一…

【软件安装】在vm上安装Centos操作系统

文章目录 下载iso镜像安装 下载iso镜像 centos下载地址:阿里巴巴centos下载地址 安装 基本按照下面的步骤走就可以了 新手一般建议典型就可以了,而且自定义也改不了什么东西,没太大必要 选择自己下载的iso镜像文件 用户名和密码 安装位置 指…

webGL开发虚拟实验室技术方案

开发虚拟实验室涉及到模拟实际实验环境和过程,同时提供用户互动性和学习体验。以下是一个可能的技术方案,用于实现这样的虚拟实验室,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

【EI会议征稿中】第五届人工智能与机电自动化国际学术会议(AIEA 2024)

第五届人工智能与机电自动化国际学术会议(AIEA 2024) 2024 5th International Conference on Artificial Intelligence and Electromechanical Automation 第五届人工智能与机电自动化国际学术会议(AIEA 2024)将于2024年3月8-10…

极致体验云上无缝协作

探索SOLIDWORKS云上之旅 谁适合应用3DEXPERIENCE云平台? 迈向云策略的数字化转型企业、加速新品上市的企业创新部门、资源有限的小微及初创企业 什么是3DEXPERIENCE云平台? 3DEXPERIENCE(3DX)是一种业务与创新平台,可让所有组织整体实时了解业务活动和生态系统&#xff0c…

SOLIDWORKS 2024新功能之Simulation篇

SOLIDWORKS 2024 新功能 Simulation篇目录概述 • 自动保存模型文件 • 壳体的接合交互 • 收敛检查图解 • 去耦合混合自由体模式 • Direct Sparse 解算器已停用 • 增强型轴承接头 • 复制算例时排除网格和结果 • 导出模型形状数据 • 网格性能 • 性能增强功能 …

活动目录是什么?

企业在进行数字化转型时,也会面临日益增长的网络用户和复杂的身份管理需求。为了高效地管理用户身份、控制访问权限以及保护企业的数据安全,许多企业选择使用微软的Active Directory,即微软活动目录,来作为网络身份管理系统。 1、…

彼此的远方

那天两个人互相表白了心意,在那天那刻确定了彼此相爱,没有鲜花,没有礼物。 男孩的世界曾陷入黑暗,冷清而又孤寂,女孩带着光和热来了,后来,女孩成为了男孩的太阳。女孩以为男孩是远方的风…

Opencv UI自动化应用人脸识别

OpenCV: Open Source Computer Vision Library OpenCV是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法 OpenCV官网:http://www.opencv.org.cn/ OpenCV 使用 C/C 开发,同时也提供了 Python、Ja…

如何用几行Python代码获取北京时间(建议收藏!)

需求场景 当使用linux系统或其他场景时,有时需要利用当前时间作为信息存储数据,但利用python的datetime库打印当前时间时,却没有正确显示对的时间(北京时间)。在本博文中,小编带你利用几行Python代码获取北京时间。 获取当前时间…