当前位置: 首页 > article >正文

mysql进阶--锁

锁的概述:锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中除传统的计算资源CPU、RAM、I/O的争用以外数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说锁对数据库而言显得尤其重要也更加复杂。锁的作用保证数据的「一致性」和「正确性」防止脏读A 事务修改数据还没提交B 事务读到了未提交的脏数据防止不可重复读A 事务两次读同一行数据中间被 B 事务修改两次结果不一样防止幻读A 事务按条件查询中间 B 事务插入了符合条件的新数据A 两次查询结果行数不一样防止数据覆盖两个事务同时修改同一行后改的覆盖先改的导致数据丢失锁的分类:全局锁锁定数据库中的所有表。表级锁每次操作锁住整张表。行级锁每次操作锁住对应的行数据。全局锁全局锁就是对整个数据库实例加锁加锁后整个实例就处于只读状态后续的 DML 的写语句DDL 语句已经更新操作的事务提交语句都将被阻塞。特点如果在主库上备份那么在备份期间都不能执行更新业务基本上就得停摆。如果在从库上备份那么在备份期间从库不能执行主库同步过来的二进制日志binlog会导致主从延迟。在 InnoDB 引擎中我们可以在备份时加上参数--single-transaction参数来完成不加锁的一致性数据备份。mysqldump --single-transaction -uroot -p123456 itcast itcast.sql表级锁表级锁每次操作锁住整张表。锁定粒度大发生锁冲突的概率最高并发度最低。应用在 MyISAM、InnoDB、BDB 等存储引擎中。对于表级锁主要分为以下三类表锁元数据锁meta data lockMDL意向锁表锁表共享读锁read lock表独占写锁write lock语法加锁lock tables 表名... read/write。释放锁unlock tables/ 客户端断开连接。读锁不会阻塞其他客户端的读但是会阻塞写。写锁既会阻塞其他客户端的读又会阻塞其他客户端的写。元数据锁MDL 加锁过程是系统自动控制无需显式使用在访问一张表的时候会自动加上。MDL 锁主要作用是维护表元数据的数据一致性在表上有活动事务的时候不可以对元数据进行写入操作。为了避免 DML 与 DDL 冲突保证读写的正确性。在 MySQL5.5 中引入了 MDL当对一张表进行增删改查的时候加 MDL 读锁 (共享)当对表结构进行变更操作的时候加 MDL 写锁 (排他)。查看元数据锁select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks;意向锁为了避免 DML 在执行时加的行锁与表锁的冲突在 InnoDB 中引入了意向锁使得表锁不用检查每行数据是否加锁使用意向锁来减少表锁的检查。简单来说就是让表锁快速知道表里有没有行锁避免冲突不用全表扫描。加行锁时自动加意向锁。行锁跟意向锁是绑定的。意向共享锁IS由语句select ... lock in share mode添加。意向排他锁IX由insert、update、delete、select ... for update添加。意向共享锁IS与表共享写锁read兼容与表独占写锁write互斥。意向排他锁IX与表共享写锁read及表独占写锁write都互斥。意向锁之间不会互斥。查看意向锁及行锁的加锁情况select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;行级锁行级锁每次操作锁住对应的行数据。锁定粒度最小发生锁冲突的概率最低并发度最高。应用在 InnoDB 存储引擎中。InnoDB 的数据是基于索引组织的行锁是通过对索引上的索引项加锁来实现的而不是对记录加的锁。对于行级锁主要分为以下三类行锁Record Lock锁定单个记录的锁防止其他事务对此行进行 update 和 delete。在 RC、RR 隔离级别下都支持。间隙锁Gap Lock锁定索引记录间隙不含该记录确保索引记录间隙不变防止其他事务在这个间隙进行 insert产生幻读。在 RR 隔离级别下都支持。临键锁Next-Key Lock行锁和间隙锁组合同时锁住数据并锁住数据前面的间隙 Gap。在 RR 隔离级别下支持。行锁InnoDB 实现了以下两种类型的行锁共享锁S允许一个事务去读一行阻止其他事务获得相同数据集的排他锁。排他锁X允许获取排他锁的事务更新数据阻止其他事务获得相同数据集的共享锁和排他锁。请求锁类型 \ 当前锁类型S共享锁X排他锁S共享锁兼容冲突X排他锁冲突冲突SQL行锁类型说明INSERT ...排他锁自动加锁UPDATE ...排他锁自动加锁DELETE ...排他锁自动加锁SELECT正常不加任何锁-SELECT ... LOCK IN SHARE MODE共享锁需要手动在 SELECT 之后加 LOCK IN SHARE MODESELECT ... FOR UPDATE排他锁需要手动在 SELECT 之后加 FOR UPDATE行锁 - 演示默认情况下InnoDB 在REPEATABLE READ事务隔离级别运行InnoDB 使用 next-key 锁进行搜索和索引扫描以防止幻读。针对唯一索引进行检索时对已存在的记录进行等值匹配时将会自动优化为行锁。InnoDB 的行锁是针对于索引加的锁不通过索引条件检索数据那么 InnoDB 将对表中的所有记录加锁此时就会升级为表锁。通过以下 SQL查看意向锁及行锁的加锁情况select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;间隙锁/临界锁间隙锁 / 临键锁 - 演示默认情况下InnoDB 在REPEATABLE READ事务隔离级别运行InnoDB 使用 next-key 锁进行搜索和索引扫描以防止幻读。索引上的等值查询 (唯一索引)给不存在的记录加锁时优化为间隙锁。索引上的等值查询 (普通索引)向右遍历时最后一个值不满足查询需求时next-key lock 退化为间隙锁。索引上的范围查询 (唯一索引)-- 会访问到不满足条件的第一个值为止。注意间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁。总结1. 全局锁对整个数据库实例加锁加锁后整个实例就处于只读状态性能较差数据逻辑备份时使用2. 表级锁操作锁住整张表锁定粒度大发生锁冲突的概率高表锁、元数据锁、意向锁3. 行级锁操作锁住对应的行数据锁定粒度最小发生锁冲突的概率最低行锁、间隙锁、临键锁

相关文章:

mysql进阶--锁

锁的概述: 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问…...

用噪音打破听觉恐怖谷:RTE 开发者社区发布 RealNoise™ TTS:全球首个原生合成动态声场的语音大模型

在过去的几年里,语音 AI 行业的内卷方向始终如一:更高的采样率、更低的延迟、更纯净的音质。我们不断训练模型去剔除哪怕最微小的背景杂音,追求实验室级别的完美信噪比(SNR)。 然而,当我们在真实的实时互动…...

告别重复造轮子:用快马AI一键生成Unity通用数据管理模块,提升开发效率

今天想和大家分享一个提升Unity开发效率的实用技巧——如何快速构建一个通用的游戏数据管理模块。这个模块可以帮我们告别重复造轮子的痛苦,把更多精力放在游戏核心玩法的开发上。 为什么需要通用数据管理模块 在Unity开发中,我们经常需要处理各种游戏数…...

新手友好:通过快马平台轻松上手vc16188视频处理开发

作为一个刚接触视频处理的新手,我最近在InsCode(快马)平台上尝试了一个vc16188视频基础处理项目,整个过程比我预想的顺利很多。这个平台最让我惊喜的是,它能根据我的需求描述直接生成完整可运行的项目代码,而且代码结构清晰、注释…...

乙巳马年春联生成终端效果展示:扫码下载功能在微信生态中的无缝流转

乙巳马年春联生成终端效果展示:扫码下载功能在微信生态中的无缝流转 1. 引言:当传统年俗遇见现代科技 春节贴春联,是刻在我们文化基因里的仪式感。但你想过吗,这个传承千年的习俗,也能和今天最前沿的AI技术碰撞出火花…...

Godot PCK文件高效解包全攻略:从资源提取到实战应用

Godot PCK文件高效解包全攻略:从资源提取到实战应用 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 作为游戏开发者或爱好者,你是否曾遇到过想要分析或复用Godot引擎打包的游…...

Instant-NGP实战:5分钟用CUDA加速你的NeRF模型渲染(附代码片段)

Instant-NGP实战:5分钟用CUDA加速你的NeRF模型渲染(附代码片段) 当你在深夜调试NeRF模型,看着进度条缓慢爬行,是否想过——如果能像英伟达演示的那样,在10毫秒内完成一帧高清渲染该多好?去年横空…...

AA-PEG-VE,AA-PEG-Vitamin E,用于修饰蛋白质、多肽以及其他含有氨基的材料

一.名称英文名:AA-PEG-VE,AA-PEG-Vitamin E,Acetic Acid-PEG-VE,Acetic Acid-PEG-Vitamin E,Vitamin E-PEG-AA中文名:乙酸聚乙二醇维生素E,乙酸-PEG-维生素E,维生素E-PEG-乙酸分子量…...

华硕笔记本风扇异常修复终极指南:用G-Helper轻松解决散热问题

华硕笔记本风扇异常修复终极指南:用G-Helper轻松解决散热问题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, St…...

LeetCode每日练习题---49.字母异位词分组

49.字母异位词分组 条件 已知: 字符串数组 目标: 将字母异位词组合在一起 思想(时间复杂度太高超时了) 我的想法是,双重遍历的暴力方法 , 先对字符串数组中的元素进行遍历 ,第一层遍历&#xff…...

OpenCore Legacy Patcher免费教程:3个关键步骤让老Mac焕发新生

OpenCore Legacy Patcher免费教程:3个关键步骤让老Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为苹果官方不支持你的老Mac升级…...

从Google Drive下载文件的终极解决方案:gdrivedl实战指南

从Google Drive下载文件的终极解决方案:gdrivedl实战指南 【免费下载链接】gdrivedl Google Drive Download Python Script 项目地址: https://gitcode.com/gh_mirrors/gd/gdrivedl 你是否曾经遇到过这样的情况:需要从Google Drive下载一个大文件…...

微信聊天记录永久保存终极指南:如何让珍贵对话永不消失

微信聊天记录永久保存终极指南:如何让珍贵对话永不消失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...

拒绝“一眼AI”!硬核跑通Gemini去AIGC工作流:实测3组调优指令+3款工具,把99%硬生生打回10%

视角重构,打破“平铺直叙”的机械感 AI生成的最大特征是“正确但平庸的上帝视角”。要ai降ai,第一步不是改词,而是强行植入一个具有批判性的“人类观察者”视角,迫使模型重组叙事逻辑。 核心原理:通过引入“辩证法”…...

MediaCrawler:社交媒体数据采集的全方位解决方案

MediaCrawler:社交媒体数据采集的全方位解决方案 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 在信息爆炸的数字时代,社交媒体平台成为数据的富矿。无论是市场分析、学术研究还是内容…...

星露谷跨地域联机实战:基于FRP的低成本内网穿透方案

1. 为什么需要FRP内网穿透玩星露谷 星露谷物语作为一款支持多人联机的农场模拟游戏,和朋友一起种田钓鱼挖矿的乐趣远胜单人游玩。但官方服务器对国内玩家并不友好,经常出现高延迟甚至连接失败的情况。更头疼的是,当你想和异地好友联机时&…...

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活 在模拟电路设计的精密世界里,电源抑制比(PSRR)仿真是评估电路抗干扰能力的关键环节。许多工程师在完成基础仿真流程后,常会遇到结果异…...

2024数学建模实战解析:多模型融合的农作物种植策略优化

1. 农作物种植策略优化的核心挑战 农业种植规划从来都不是简单的选择题。记得去年帮一个乡村做种植方案时,村长拿着往年的收成数据一脸愁容:"明明去年种辣椒赚了钱,怎么今年大家都种就亏本了?"这个问题恰恰揭示了农作物…...

替代CM108|替代CM108B|替代HS100|SSS1629代理商|中文说明书|台湾鑫创

SSS1623,SSS1629全面兼容与替代台湾骅讯c-mediaCM108/CM108B/CM108AH/CM118B/CM119/CM119A/HS100/CM6120/CM6317A/CM6400/CM6200等型号, 全面兼容与替代台湾创舰Isoft IS817/IS821/IS828/IS820/IS807等型号,完美替代市面上所有主流USB耳机IC,USB喇叭IC, USB音箱IC, USB游戏耳机…...

MozJPEG终极指南:如何用开源工具将JPEG压缩效率提升30%以上

MozJPEG终极指南:如何用开源工具将JPEG压缩效率提升30%以上 【免费下载链接】mozjpeg Improved JPEG encoder. 项目地址: https://gitcode.com/gh_mirrors/mo/mozjpeg 在当今图像密集的互联网时代,JPEG格式仍然是网页图片的主流选择,但…...

Vue项目里嵌入一个专属绘图工具:我是如何用Drawio-Embed定制企业级流程设计器的

Vue项目中定制企业级流程设计器:基于Drawio-Embed的深度集成实践 当企业级应用需要内置可视化流程设计能力时,现成解决方案往往难以满足高度定制化的业务需求。本文将分享如何基于Drawio核心引擎,通过Vue生态实现一个深度集成、可完全定制的流…...

农业AI实践:OpenClaw+Qwen2.5-VL-7B识别病虫害图片

农业AI实践:OpenClawQwen2.5-VL-7B识别病虫害图片 1. 为什么选择OpenClaw做农业病虫害识别? 去年夏天,我在自家后院种植的番茄突然出现叶片发黄、边缘卷曲的现象。作为非专业农户,我翻遍植物病理学资料仍无法确诊,直…...

数学解题能力实测:通义千问QwQ-32B vs Claude 3.5 Sonnet,谁才是理科生最佳AI助手?

数学解题能力实测:通义千问QwQ-32B vs Claude 3.5 Sonnet,谁才是理科生最佳AI助手? 当一道复杂的AIME竞赛题摆在面前时,你会选择哪种AI助手?是擅长分步推导的开源新秀QwQ-32B,还是以逻辑严谨著称的Claude 3…...

新手也能懂!用沁恒CH579的TMOS实现第一个蓝牙外设(附完整代码)

从零开始:用沁恒CH579打造你的第一个蓝牙LED控制器 第一次接触嵌入式开发的新手们,常常会被各种专业术语和复杂框架吓退。但今天,我要带你用沁恒CH579开发板和它的TMOS系统,完成一个实实在在的蓝牙控制LED项目——不需要深厚的编…...

Element-UI表格避坑指南:修改展开图标+整行点击+智能隐藏,这些细节你知道吗?

Element-UI表格交互优化实战:图标定制与智能展开的进阶技巧 第一次使用Element-UI的Table组件时,我对着文档折腾了半天才让展开功能正常工作。但当我看到默认的小箭头图标时,总觉得和产品设计风格格格不入;点击展开区域太小导致用…...

别再手动翻译Excel了!用Python+腾讯翻译API,5分钟搞定整张表格

别再手动翻译Excel了!用Python腾讯翻译API,5分钟搞定整张表格 当产品经理收到海外用户反馈的CSV文件时,第一反应往往是打开翻译网站逐行复制粘贴。我曾见过同事花三小时处理200条英文评论,而同样的工作用Python脚本只需喝杯咖啡的…...

Youtu-VL-4B-Instruct-GGUF助力开源社区:如何向GitHub提交高质量的模型使用案例

Youtu-VL-4B-Instruct-GGUF助力开源社区:如何向GitHub提交高质量的模型使用案例 1. 引言:从使用者到贡献者 不知道你有没有这样的经历:在网上找到一个看起来很酷的开源项目,兴致勃勃地打开它的GitHub页面,结果发现文…...

Flink on K8s实战:从源码到部署,手把手教你自定义Job提交流程

Flink on K8s深度定制:从源码改造到生产级部署的全链路实践 1. 为什么需要自定义Flink on K8s的提交流程? 在标准的Flink on Kubernetes部署中,官方提供的客户端工具已经能够满足基础需求。但当企业面临以下场景时,原生方案就会显…...

实战应用:基于快马平台开发一个具备节点测速功能的网络工具面板

最近在折腾服务器节点管理时,发现手动测试各个节点的延迟特别麻烦。正好看到InsCode(快马)平台这个在线开发环境,就尝试用它快速搭建了一个带测速功能的网络工具面板。整个过程比想象中简单很多,分享下具体实现思路。 项目构思 这个工具的核…...

FT232串口在Ubuntu22.04上不稳定?3步搞定驱动冲突问题

FT232串口在Ubuntu 22.04上的稳定性优化实战指南 当你正在调试一个物联网设备,突然发现串口连接莫名其妙断开,那种感觉就像在高速公路上爆胎——既突然又让人抓狂。Ubuntu 22.04作为当前LTS版本,本应提供稳定的开发环境,但FTDI芯片…...