MySQL InnoDB引擎 有哪些锁

MySQL InnoDB 引擎提供了多种类型的锁,这些锁机制可以控制并发事务对数据的访问,保证数据的一致性和完整性。以下是 InnoDB 引擎中常见的几种锁:

1、按锁的粒度分类

行锁(Row Lock)

定义:行锁是对表中的某一行记录进行加锁,粒度最小,并发度高。只有在使用索引条件检索数据时,InnoDB 才会使用行锁;如果没有使用索引,InnoDB 会将行锁升级为表锁。

类型:

  • 共享锁(Shared Lock,S 锁):也称为读锁,多个事务可以同时对同一行数据加共享锁。持有共享锁的事务可以读取数据,但不能修改数据。只有当所有的共享锁都释放后,其他事务才能对该行数据加排他锁。例如,多个事务可以同时对某一行数据加共享锁进行读取操作。
  • 排他锁(Exclusive Lock,X 锁):也称为写锁,一个事务对某一行数据加排他锁后,其他事务不能再对该行数据加任何类型的锁(包括共享锁和排他锁)。持有排他锁的事务可以读取和修改数据。例如,当一个事务要更新某一行数据时,会先对该行数据加排他锁。

示例:

-- 加共享锁
SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE;
-- 加排他锁
SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
表锁(Table Lock)

定义:表锁是对整个表进行加锁,粒度最大,并发度低。当一个事务对表加了表锁后,其他事务不能对该表进行任何读写操作,直到锁被释放。

类型:

  • 表共享读锁(Table Shared Read Lock):多个事务可以同时对同一个表加表共享读锁,这些事务可以同时读取表中的数据,但不能修改数据。
  • 表排他写锁(Table Exclusive Write Lock):一个事务对表加了表排他写锁后,其他事务不能再对该表加任何类型的锁,持有锁的事务可以对表进行读写操作。

示例:

-- 加表共享读锁
LOCK TABLES table_name READ;
-- 加表排他写锁
LOCK TABLES table_name WRITE;
-- 释放锁
UNLOCK TABLES;

2、按锁的用途分类

间隙锁(Gap Lock)

定义:间隙锁用于锁定索引记录之间的间隙,防止其他事务在这些间隙中插入新的记录,从而避免幻读问题。间隙锁只在可重复读(Repeatable Read)和串行化(Serializable)隔离级别下使用。例如,当一个事务执行范围查询 SELECT * FROM table_name WHERE id BETWEEN 10 AND 20 FOR UPDATE; 时,InnoDB 会对 id 介于 10 和 20 之间的间隙加锁。

临键锁(Next-Key Lock)

定义:临键锁是行锁和间隙锁的组合,它既锁定索引记录本身,又锁定该记录前面的间隙。临键锁的主要目的是解决幻读问题,在可重复读隔离级别下,InnoDB 默认使用临键锁。例如,当一个事务对 id 为 10 的记录加临键锁时,它会锁定 id 为 10 的记录以及 id 小于 10 的间隙。

意向锁(Intention Lock)

定义:意向锁是一种表级别的锁,用于表示事务在未来某个时刻可能会对表中的某一行或多行记录加共享锁或排他锁。意向锁的作用是为了在使用表锁时,能够快速判断表中是否有行被加锁,从而避免在加表锁时需要遍历所有行来检查锁的状态。

类型:

  • 意向共享锁(Intention Shared Lock,IS 锁):表示事务打算在表中的某一行记录上加共享锁。
  • 意向排他锁(Intention Exclusive Lock,IX 锁):表示事务打算在表中的某一行记录上加排他锁。

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

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

相关文章

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案:

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案: 一、系统概述 本系统采用双巨控GRM241Q模块构建4G无线物联网络,实现山上液位数据实时传输至山下水泵站,通过预设逻辑自动控制水泵启停,同时支持APP远程监控及人工…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名,在百度地图网站上搜索到的地点可能是商业网点,在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中,搜索地名,如“乱石头川”,该地名会出…

Photoshop自定义键盘快捷键

编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…

carbon 加入 GitCode:Golang 时间处理的 “瑞士军刀”

在 Golang 的开发生态中,时间处理领域长期存在着诸多挑战。高效、精准的时间处理对于各类软件应用的稳定运行与功能拓展至关重要。近日,carbon 正式加入 GitCode,为 Golang 开发者带来一款强大且便捷的时间处理利器,助力项目开发迈…

项目总结: 应用程序的扩展bundle化,自定义classLoader

目录 描述事情实现的简单说明主应用业务1业务2 实现细节描述更多总结 描述事情 应用程序的主逻辑要做一件事,也提供了扩展。即如果想干预这个逻辑,业务可以自己扩展。 设计图如下: 应用:application, AppClassLoader加载&#…

基于javaweb的SpringBoot电影推荐系统

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 运行环境开发工具适用功能说明项目介绍环境需要技术栈使用说明 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclips…

linux部署ollama+deepseek+dify

Ollama 下载源码 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz启动 export OLLAMA_HOST0.0.0.0:11434 ollama serve访问ip:11434看到即成功 Ollama is running 手动安装deepseek…

1 推荐系统概述

推荐系统概述 1 推荐系统的意义平台方信息生产者(物品)信息消费者(用户)推荐和搜索的区别 2 推荐系统架构系统架构算法架构 3 推荐系统技术栈算法画像层召回/粗排精排重排序 工程 1 推荐系统的意义 信息生产者(平台方…

torch_bmm验算及代码测试

文章目录 1. torch_bmm2. pytorch源码 1. torch_bmm torch.bmm的作用是基于batch_size的矩阵乘法,torch.bmm的作用是对应batch位置的矩阵相乘,比如, mat1的第1个位置和mat2的第1个位置进行矩阵相乘得到mat3的第1个位置mat1的第2个位置和mat2的第2个位置…

汽车与AI深度融合:CES Asia 2025前瞻

在科技飞速发展的当下,汽车与AI的融合正成为行业变革的关键驱动力。近日,吉利、极氪、岚图、智己等多家车企纷纷官宣与DeepSeek模型深度融合,其中岚图知音更是将成为首个搭载该模型的量产车型,这无疑是汽车智能化进程中的重要里程…

Racecar Gym 总结

1.Racecar Gym 简介 Racecar Gym 是一个基于 PyBullet 物理引擎 的自动驾驶仿真平台,提供 Gymnasium(OpenAI Gym) 接口,主要用于强化学习(Reinforcement Learning, RL)、多智能体竞速(Multi-Ag…

jupyterLab插件开发

jupyter lab安装、配置: jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…

1.Excel:某停车场计划调整收费标准❗(13)

目录 函数VLOOKUP ROUNDUP/ROUNDDOWN函数 NO1​ NO2会计专用类型​ NO3收费标准VLOOKUP​ NO4停放时间(天)​ NO5金额roundup/rounddown​ ​NO6汇总行​ NO7单元格突出显示​ NO8数据透视表​ 函数VLOOKUP VLOOKUP(收费标准!A3:B5 F4&#xf…

elasticsearch安装插件analysis-ik分词器(深度研究docker内elasticsearch安装插件的位置)

最近在学习使用elasticsearch,但是在安装插件ik的时候遇到许多问题。 所以在这里开始对elasticsearch做一个深度的研究。 首先提供如下链接: https://github.com/infinilabs/analysis-ik/releases 我们下载elasticsearch-7-17-2的Linux x86_64版本 …

Git 分布式版本控制工具使用教程

1.关于Git 1.1 什么是Git Git是一款免费、开源的分布式版本控制工具,由Linux创始人Linus Torvalds于2005年开发。它被设计用来处理从很小到非常大的项目,速度和效率都非常高。Git允许多个开发者几乎同时处理同一个项目而不会互相干扰,并且在…

VMware 虚拟机 ubuntu 20.04 扩容工作硬盘

一、关闭虚拟机 关闭虚拟机参考下图,在vmware 调整磁盘容量 二、借助工具fdisk testubuntu ~ $ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 388M 3.1M 385M 1% /run /dev/sda5 …

使用python tk 做UI,实现的步骤如下:

Update UI 先~ 使用python tk 做UI,实现的步骤如下:1、点击初始化按钮后,Robot 回到Home 位置,位置到达后发送Home 给视觉,UI更新Robot位置为 Home 2、点击基准按钮后,Robot 走到POS1,位置到达后发送POS1+++当前位置(Ref_POS1_X、Ref _POS1_Y、Ref _POS1_R)给视觉,UI更…

头条百度批量采集软件说明文档

旧版说明文档《头条号文章批量采集软件4.0版本说明文档!头条/微头条文章批量采集》 头条的采集软件已经更新了好多个版本了,一直没有做详细的介绍文档,最近更新了一些功能进去,一块来写一下说明文档。 1、主界面 2、头条作者采集…

Wpf美化按钮,输入框,下拉框,dataGrid

Wpf美化按钮&#xff0c;输入框&#xff0c;下拉框&#xff0c;dataGrid 引用代码后 引用资源 <ControlTemplate x:Key"CustomProgressBarTemplate" TargetType"ProgressBar"><Grid><Border x:Name"PART_Track" CornerRadius&q…

DeepSeek从入门到精通:全面掌握AI大模型的核心能力

文章目录 一、DeepSeek是什么&#xff1f;性能对齐OpenAI-o1正式版 二、Deepseek可以做什么&#xff1f;能力图谱文本生成自然语言理解与分析编程与代码相关常规绘图 三、如何使用DeepSeek&#xff1f;四、DeepSeek从入门到精通推理模型推理大模型非推理大模型 快思慢想&#x…