【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】

news2024/11/16 3:02:18

目录

一、全局锁

二、表级锁

        1.表锁

        2.元数据锁

        3.意向锁

三、行级锁

       1. 行锁

        2.间隙锁

        3.临建锁


锁是处理并发情况下,对数据的一致性的关键因素,也是并发情况下对效率影响非常大的。

1、全局锁:锁定表中所有数据。

2、表级锁:锁定整张数据库表。

3、行级锁:对某行数据进行锁定。

一、全局锁

        对数据库所有实例进行加锁,也就是整个数据库所有表进行加锁。一般在备份的时候,进行加全局锁,这样就会让备份的数据与当时数据库的数据一致,DML DDL操作无法访问只能DQL操作。

        加全局锁的语法:flush tables with read lock;

        解全局锁的语法:unlock tables;

        优化备份

二、表级锁

        1.表锁

                使用的语法

                        加锁:lock tables 表名... read/write

                        解锁:unlock tables 

                1.表共享读锁

                        共享读锁就是只能进行读操作,不能进行写操作。                      

                2.表共享写锁
                        共享写锁当前客户端可以进行读写操作,但是其他客户端不能进行读写操作。

        2.元数据锁

                是系统自动控制的,不需要显示使用,访问一张表的时候会进行自动加锁。避免DDL和DML冲突,保证读写的正确性。意思就是在表中开始事务的时候,不许对表的结构进行更改。

        对数据更改的时候会加上一个排他锁,与其他锁是互斥的。元数据共享读锁和元数据共享写锁之间是兼容的。

        3.意向锁

        如果加表锁的时候,如果有行锁那么会出现冲突,所以再加表锁的时候每行进行检查是否有行级锁,但如果有意向锁,那么直接检查意向锁是否与表锁兼容,如果兼容直接加锁,如果不兼容就不允许加。 

        意向共享锁与表锁的共享锁(read)兼容,与表锁的排他锁(write)互斥;

        意向排他锁与表锁的共享锁与排他锁都互斥。

        意向锁直接不回互斥。

三、行级锁

       1. 行锁

                防止其他事务对此数据进行update和delete,RC(读已提交),RR(可重复读)事务情况都支持。

                1.共享锁(S)

                        允许一个事务读一行,阻止其他事务获得相同数据集的排他锁。

                2.排他锁(X)

                        允许数据更新,但是阻止其他事务获取相同数据集的排他锁和共享锁。

加锁方式,一般用索引进行加锁,如果没有索引那么行锁的加锁方式会升级成表锁!

        2.间隙锁

                只锁数据的间隙,而不锁数据本身,防止插入数据的时候产生幻读,在RR情况下支持。

                索引上进行等值查询唯一索引,如果给不存的记录加锁时,优化为间隙锁,比如给两条记录中间的值加锁,此时给这个间隙加上了间隙锁。

                如果使用的是非唯一索引,加锁进行等值匹配的时候会将该值的前后都加上间隙锁,因为非唯一索引插入可能会插入相同的值 在前后,为了避免这种情况就可以这样加间隙锁。

        3.临建锁

                是行锁和间隙锁的组合,在RR情况下支持。

                在唯一索引下比如有个索引19,后面有一个25,我通过>19条件进行判断加锁,那么此时就会锁住19 25及19之间的还要25以后到正无穷的数据。

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

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

相关文章

客户案例|智能进化:通过大模型重塑企业智能客服体验

01 概 述 随着人工智能技术的快速发展,客户对服务体验的期待和需求不断升级。在此背景下,大模型技术的崛起,为智能客服领域带来了创造性的变革。 在上篇文章《在后LLM时代,关于新一代智能体的思考》中有提到,智能客服…

【Leetcode 中等】34. 在排序数组中查找元素的第一个和最后一个位置

原题链接 Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。 你必…

直接缓存映射Direct Mapped Cache

这张图展示了**直接映射缓存(Direct Mapped Cache)**的结构和工作原理,并解释了如何将主存中的块映射到缓存中的特定行(组)。以下是引用第 0 块和第 8 块时的细节分析: 直接映射缓存的特点 映射规则&…

基于Java Springboot图书馆管理系统

一、作品包含 源码数据库文档全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据库:MySQL8.0 数据…

Python中的HTML

文章目录 一. HTML1. html的定义2. html的作用3. 基本结构4. 常用的html标签5. 列表标签① 无序列表② 有序列表 6. 表格标签7. 表单标签8. 表单提交① 表单属性设置② 表单元素属性设置 一. HTML 1. html的定义 HTML 的全称为:HyperText Mark-up Language, 指的是…

大数据新视界 -- 大数据大厂之 Impala 存储格式转换:从原理到实践,开启大数据性能优化星际之旅(下)(20/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子,每个篮子装的水果种类相同,如果从 0 开始摘,则只能摘 0 和 1 两个种类 ; 因为当我们在两个果篮都装有水果的情况下,如果再走到下一颗果树,果树的水果种类…

【ubuntu16.04】机器人学习笔记遇到的问题及解决办法:仿真小海龟

18版本的后面会出问题,避免万一我还是用了之前的16版本,虽然还没有解决粘贴的问题,但是安装ros很成功 可参考该文章博主讲的很详细,成功画出海龟 最后要把鼠标停在第三个终端,再去点击键盘,海龟才会动哦

游戏引擎学习第九天

视频参考:https://www.bilibili.com/video/BV1ouUPYAErK/ 修改之前的方波数据,改播放正弦波 下面主要讲关于浮点数 1. char(字符类型) 大小:1 字节(8 位)表示方式:char 存储的是一个字符的 A…

探索 JNI - Rust 与 Java 互调实战

真正的救赎,并非厮杀后的胜利,而是能在苦难之中,找到生的力量和内心的安宁。 ——加缪Albert Camus 一、Rust Java ? Java 和 Rust 是两种现代编程语言,各自具有独特的优势,适用于不同的应用场景。 1、…

C++11新特性(二)

目录 一、C11的{} 1.初始化列表 2.initializer_list 二、可变参数模版 1.语法与原理 2.包扩展 3.empalce接口 三、新的类功能 四、lambda 1.语法 2.捕捉列表 3.原理 五、句装器 1.function 2.bind 一、C11的{} 1.初始化列表 C11以后想统⼀初始化⽅式&#xff0…

生信:TCGA学习(R、RStudio安装与下载、常用语法与常用快捷键)

前置环境 macOS系统,已安装homebrew且会相关命令。 近期在整理草稿区,所以放出该贴。 R语言、RStudio、R包安装 R语言安装 brew install rRStudio安装 官网地址:https://posit.co/download/rstudio-desktop/ R包下载 注意R语言环境自带…

Vue3集成搜索引擎智能提示API

需求: 如何在项目中实现像百度搜索框一样的智能提示效果,如下图所示: 相关知识: 下面是各厂商提供的免费API 厂商请求百度http://suggestion.baidu.com/su?wd中国&cbwindow.baidu.sug必应http://api.bing.com/qsonhs.as…

大数据技术在智慧医疗中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 大数据技术在智慧医疗中的应用 大数据技术在智慧医疗中的应用 大数据技术在智慧医疗中的应用 引言 大数据技术概述 定义与原理 发…

游戏引擎学习第10天

视频参考:https://www.bilibili.com/video/BV1LyU3YpEam/ 介绍intel architecture reference manual 地址:https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html RDTS(读取时间戳计数器)指令是 x86/x86_64 架构中的…

「QT」文件类 之 QTemporaryDir 临时目录类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

Kettle配置数据源错误“Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found”解决记录

问题描述 错误提示:“Driver class ‘org.gjt.mm.mysql.Driver’ could not be found, make sure the ‘MySQL’ driver (jar file) is installed.” 原因分析: 根据错误提示是缺少了相关的数据源连接jar包。 解决方案: 安装对应的Mysql…

C++《继承》

在之前学习学习C类和对象时我们就初步了解到了C当中有三大特性,分别是封装、继承、多态,通过之前的学习我们已经了解了C的封装特性,那么接下来我们将继续学习另外的两大特性,在此将分为两个章节来分别讲解继承和多态。本篇就先来学…

力扣(LeetCode)283. 移动零(Java)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🐹今日诗词:雾失楼台,月迷津渡🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主…

运算放大器的学习(一)输入阻抗

输入阻抗 最近需要对运算放大器进行学习,我们后面逐一对其参数进行了解。 首先了解下输入阻抗。 放大电路技术指标测试示意图: 输入电阻: 从放大电路的输入端看进去的等效电阻称为放大电路的输入电阻,如上图,此处考虑…