【MYSQL】锁
📅 2026/7/29 9:40:57
👁️ 次浏览
锁文章目录锁全局锁表级锁表锁元数据锁意向锁行级锁平时操作数据库时如果多人同时修改同一份数据很容易出现数据错乱MySQL 里的各类锁就是用来避免这种问题的。不少人分不清全局锁、表锁、行锁的区别写 SQL 时经常碰到查询卡住、更新被阻塞的情况。这份笔记从大范围到小范围把所有常用锁的用法、适用场景都整理清楚方便大家理解区分全局锁锁住整个 MySQL 实例所有库所有表属于全局只读锁。规则所有客户端只能查不能增删改、不能 DDL持有锁的会话自身可以正常读写其他会话写操作会阻塞直到解锁。使用场景—备份数据1.加锁flash tables with read lock;2.备份mysqldump -u用户名-p密码 要拷贝的表 拷贝到的地方3.解锁unlock tables;表级锁表锁对于表锁分为两类读锁多个会话可同时加读锁互相不影响查询任何会话不能增删改该表写操作阻塞。语法lock table 表名 read;unlock tables;写锁只有持有锁的会话能查、改表数据其他会话不管读、写全部阻塞。语法lock table 表名 write;unlock tables;元数据锁MDL 元数据锁每张表自带作用对象是表结构信息表名、字段、索引不是行 / 表数据。只要事务访问一张表SELECT/INSERT/UPDATE事务全程持有 MDL事务结束才释放。两种元素锁共享元数据锁读MDL普通 DML增删改查申请共享元数据锁多个事务可以同时持有互不冲突2. 排他元数据锁写MDLDDL 语句ALTER、DROP、TRUNCATE、RENAME申请排他元数据锁当有共享数据锁时此时提交DDL语句DDL语句将会阻塞直到前面申请的共享数据锁释放后DDL语句才能执行同时如果后面有共享数据锁后面的DML语句也会被阻塞只有前面的DDL语句执行完后后面的DML语句才能执行对应情况如下对应 SQL锁类型说明lock tables xxx read / writeSHARED_READ_ONLY / SHARED_NO_READ_WRITE手动表锁对应的 MDL 模式select、select … lock in share modeSHARED_READ与 SHARED_READ、SHARED_WRITE 兼容与 EXCLUSIVE 互斥insert、update、delete、select … for updateSHARED_WRITE与 SHARED_READ、SHARED_WRITE 兼容与 EXCLUSIVE 互斥alter table …EXCLUSIVE与其他所有 MDL 锁全部互斥意向锁意向锁是用来解决行锁和表锁之间的冲突的如果不上意向锁当一个窗口进行增删改查的时候另一个窗口并发进行表锁此时另外一个窗口要从上到下遍历是否有行锁降低了效率而上了意向锁后就不要挨个遍历行一下可以看出是否有行锁。意向锁分为两类共享意向锁IS触发SQLselect … lock in share mode;与表锁read兼容与表锁write互斥排他意向锁IX触发SQLinsert / update / delete / select … for update;与表锁read和write都互斥查看当前的所有锁SELECT object_schema,object_name,index_name,lock_type,lock_mode,lock_data FROM performance_schema.data_locks行级锁只锁某一行数据不锁整张表并发性能远高于表锁仅 InnoDB 支持MyISAM 没有行锁。依赖索引生效查询条件不走索引时行锁会退化成表锁。例子update stu set name‘lily’ where name‘mary’;此时name没有索引那么在另一个窗口想要更新一条非上面那一条的数据也是更新不了的因为此时本身只锁lily的行锁升级为表锁其他数据的更新也会被阻塞。本质是给索引条目加锁不是锁物理记录行锁分为两类共享锁读锁语法select … lock in share mode;规则多个事务可同时加 S 锁共享读持有 S 锁时其他事务不能加写锁只能读场景需要保证数据读取期间不被修改排他锁写锁语法DML 自动加insert / update / delete自动加 X 锁手动select … for update;规则一行数据只能有一个事务持有 X 锁其他事务不能读、不能改该行会阻塞等待锁释放SQL行锁类型说明INSERT …排他锁自动加锁UPDATE …排他锁自动加锁DELETE …排他锁自动加锁SELECT正常不加任何锁SELECT … LOCK IN SHARE MODE共享锁需要手动在 SELECT 之后加 LOCK IN SHARE MODESELECT … FOR UPDATE排他锁需要手动在 SELECT 之后加 FOR UPDATE行级锁下面又有两种锁间隙锁Gap定义锁住两条索引记录中间的空白区间不锁已存在的数据行只锁 “空位”。作用阻止其他事务在这个区间插入新数据解决幻读。举例表主键索引数据1、3、5、7执行update set namea where id3;匹配到 id3 这条记录间隙锁锁住两个区间(1,3)、(3,5)其他事务不能插入 2、4避免新增数据导致幻读。临键锁Next-Key Lock使用场景范围查询、、、、between索引数据1、3、5、7执行where id 5临键锁区间(-∞,1]、(1,3]、(3,5]区间内已有数据不能修改区间空位不能插入普通索引等值查询不会降级保留临键锁update t set name‘test’ where phone ‘13800’;此时的phone是普通索引前后间隙都锁住等值查询但匹配不到任何数据update t set name‘xx’ where id 4;表里无 id4 这条记录锁区间(3,5]禁止插入4不能修改区间空位不能插入普通索引等值查询不会降级保留临键锁update t set name‘test’ where phone ‘13800’;此时的phone是普通索引前后间隙都锁住等值查询但匹配不到任何数据update t set name‘xx’ where id 4;表里无 id4 这条记录锁区间(3,5]禁止插入4平时写 SQL 记住两个关键点查询条件建好索引别长时间占用表再修改表结构就能减少数据库卡死、等待的情况更好地保证数据正常读写。如果喜欢我的内容觉得我的内容有帮助到你的可以动动小手点赞收藏我们下期再见
1. 项目概述:将百度网盘映射为Linux本地存储的技术方案在Linux环境下直接访问百度网盘内容一直是用户的痛点。传统客户端功能受限,网页版操作繁琐,而通过AListRclone的组合方案,可以实现将百度网盘挂载为本地文件系统的效果。这个…
📅 2026/7/29 9:40:57
1. muduo网络库概述 muduo是一个基于Reactor模式的高性能C网络库,由陈硕开发并开源。它主要面向Linux平台,采用非阻塞IO和事件驱动机制,特别适合开发高性能的TCP服务器应用。我在实际项目中使用muduo已有三年多时间,它简洁的设计和…
📅 2026/7/29 9:39:57
1. 项目概述:从网络协议到代码实现最近在做一个涉及HTTPS双向认证的后台服务,调试时发现客户端证书验证总是不通过。日志里只抛出一个笼统的“证书无效”错误,这就像医生只告诉你“生病了”,却不告诉你病因在哪。为了定位问题&…
📅 2026/7/29 9:39:57
1. 项目概述在嵌入式系统、工业控制、网络设备乃至一些消费电子产品的开发中,以太网物理层(PHY)芯片的选择与设计往往是决定网络通信稳定性和性能的关键。它不像MCU或FPGA那样引人注目,但却是数据能否“跑”起来、跑得稳的基石。今…
📅 2026/7/29 10:47:19
每周读书与学习 -> 认识性能测试工具JMeter
引言:为什么需要性能测试?在软件开发的世界里,功能测试确保软件“能正常工作”,而性能测试则回答“在高负载下能否正常工作”。想象一下,一个电商网站在双十一期间&#…
📅 2026/7/29 10:47:19
1. 项目缘起:一个3D打印爱好者的自动化执念 作为一个重度3D打印机用户,我常年被打印舱内的环境管理问题困扰。打印PLA时,舱内温度过高会导致模型翘边、层间粘合不佳;打印ABS时,又需要维持一个稳定且较高的舱温…
📅 2026/7/29 10:47:19
1. 问题缘起:当分页查询遇上“20条”这个坎最近在做一个云资源管理的后台系统,需要频繁地从腾讯云拉取CVM实例列表。需求很简单,就是分页展示,一页20条,用户翻页就继续拉。一开始用官方SDK的DescribeInstances接口&…
📅 2026/7/29 10:47:19
R3nzSkin英雄联盟换肤工具:3步快速上手终极指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin
R3nzSkin是一款专为英雄联盟玩家设计的开源换肤工具,采用先进的内存…
📅 2026/7/29 10:47:19
昨晚熬夜搞那个GEO数据集,真的快崩溃了。你们有没有那种感觉,明明教程写得明明白白,一到自己电脑上跑就报错,红彤彤的一片,看着就头疼。特别是涉及到geo2R下载的数据这一块,很多人第一次接触都容易懵圈。今天我就想跟大伙儿掏心窝子聊聊这个事儿,不整那些虚头巴脑的理论…
📅 2026/7/29 10:45:52
解密Seq的核心功能:如何利用Pipeline实现高效基因组数据处理 【免费下载链接】seq A high-performance, Pythonic language for bioinformatics 项目地址: https://gitcode.com/gh_mirrors/se/seq
Seq作为一款高性能的生物信息学专用语言,其Pipel…
📅 2026/7/29 0:00:00
Flask-Blogging插件开发指南:打造属于你的个性化博客功能 【免费下载链接】Flask-Blogging A Markdown Based Python Blog Engine as a Flask Extension. 项目地址: https://gitcode.com/gh_mirrors/fl/Flask-Blogging
Flask-Blogging是一个基于Markdown的Py…
📅 2026/7/29 0:00:00
近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…
📅 2026/7/29 0:01:00
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/29 1:14:44
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/29 1:14:44
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/29 1:14:46
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/29 7:15:11
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/28 17:14:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/29 5:15:05