mysql的行锁具体是怎么工作的

news/2024/7/24 2:29:55 标签: 数据库, mysql

mysql行级锁是怎么工作的?
加锁的对象是索引,加锁的基本单位是 next-key lock。在能使用记录锁或者间隙锁就能避免幻读现象的场景下, next-key lock 就会退化成记录锁或间隙锁。
锁的范围,总结一下就是,对于唯一索引,锁只有对应的记录或者所在范围即可;非唯一索引则要看看可能加上一个范围,因为即使找到了索引也是非唯一的。
这个比较复杂,请移步这篇博客以及这篇博客

假设锁定读查询用到索引,就会锁住二级索引对应位置和查询到的记录的主键索引(没查到就不用锁主键索引)。如果锁定读查询语句,没有使用索引列作为查询条件,或者查询语句没有走索引查询,导致扫描是全表扫描。那么,每一条记录的索引上都会加 next-key 锁,这样就相当于锁住的全表,这时如果其他事务对该表进行增、删、改操作的时候,都会被阻塞。

不只是锁定读查询语句不加索引才会导致这种情况,update 和 delete 语句如果查询条件不加索引,那么由于扫描的方式是全表扫描,于是就会对每一条记录的索引上都会加 next-key 锁,这样就相当于锁住的全表。

因此,在线上在执行 update、delete、select … for update 等具有加锁性质的语句,一定要检查语句是否走了索引,如果是全表扫描的话,会对每一个索引加 next-key 锁,相当于把整个表锁住了,这是挺严重的问题。


http://www.niftyadmin.cn/n/5239825.html

相关文章

【GPU】linux 安装、卸载 nvidia 显卡驱动、cuda 的官方文档、推荐方式(runfile)

文章目录 1. 显卡驱动1.1. 各版本下载地址1.2. 各版本文档地址1.3. 安装、卸载方式 2. CUDA2.1. 各版本下载地址2.2. 各版本文档地址2.3. 安装、卸载方式2.4. 多版本 CUDA 切换方式 1. 显卡驱动 1.1. 各版本下载地址 https://www.nvidia.com/Download/Find.aspx?langzh-cn 1…

独立开发者都使用了哪些技术栈?

目录 一、前言 架构展示: 技术栈展示: 二、JNPF-JAVA-Cloud微服务 1.后端技术栈 2. 前端技术栈 Vue3技术栈 3. 数据库支持 一、前言 像独立开发者这类人群,也可以把他们理解为个人开发者/自由职业者。有一组数据显示,在美国&#…

Flannel源码解析

Flannel源码解析 项目地址: https://github.com/flannel-io/flannel 更多文章访问 https://www.cyisme.top flannel中有三种工作模式: udp。 性能最低,利用tun/tap设备,通过udp封装ip包。中间需要经过多次内核态和用户态的切换。vxlan。 性能中等&…

【CSP】202309-2_坐标变换(其二)Python实现

文章目录 [toc]试题编号试题名称时间限制内存限制问题描述输入格式输出格式样例输入样例输出样例说明评测用例规模与约定评分方式提示Python实现 试题编号 202309-2 试题名称 坐标变换(其二) 时间限制 2.0s 内存限制 512.0MB 问题描述 对于平面直角坐标系…

软件测试要学习的基础知识——黑盒测试

黑盒测试概述 黑盒测试也叫功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作是一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,只检查程序功能是否按照…

net6中使用MongoDB

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目 一、MongoDB是什么? 二、使用步骤 1.安装驱动 2.设置连接字符串、配置类 3.建立实体类 4.服务层 5.在Program添加服务 6.在Controller注入服务 总结 一、Mongo…

Ubuntu18.04安装LVI-SAM保姆级教程

目录 1 LIO-SAM的安装前要求 1.1 ROS安装:参考我的另一篇博客 1.2 gtsam安装(参考LeGO-LOAM 1.2节) 2 安装

第二章[变量与数据类型]:2.10:数据类型转换

一,其他数据类型转整数 1,其他数据类型转整数: 使用int函数即可 功能:把一个字符串转换为整型 语法: class int(x, base=10) x — 待转换的字符串或字节串 base — x参数的进制数,默认十进制 返回类型: 整数 2,字符串转换成整数 # 将字符串转换成为整数 print(int(&qu…