【MySQL】锁

全局锁

全局锁:对整个数据库实例加锁,加锁后整个实例就处于只读状态,其他语句都将被阻塞。

使用场景是:全库的逻辑备份

语法:

1、加全局锁

flush tables with read lock ;

2、数据备份

mysqldump -uroot –proot demo > demo.sql

3、释放锁

unlock tables ;

问题:

  1. 在主库上备份,加锁后不能执行更新,业务基本上就得停摆
  2. 在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟。

不加锁的一致性数据备份:

mysqldump --single-transaction -uroot –proot demo > demo.sql

表级锁

表级锁:每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。

主要分为以下三类:

  1. 表锁
  2. 元数据锁(meta data lock,MDL)
  3. 意向锁

表锁

表锁分为两类:

  1. 表共享读锁(read lock):不独占,大家只能读
  2. 表独占写锁(write lock):独占读写

表锁语法:

-- 加锁(读锁)
lock tables score read;
-- 加锁(写锁)
lock tables score write;

-- 关锁
unlock tables;

元数据锁 MDL

为了避免DML(增删改)与DDL(表结构)冲突,保证读写的正确性。

某一张表涉及到未提交的事务时,是不能够修改这张表的表结构的。

意向锁

解决行锁与表锁的冲突。

为了避免DML(增删改)在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

一旦事务提交了,意向共享锁、意向排他锁,都会自动释放。

  • 意向共享锁(IS):由语句select ... lock in share mode添加
    • 与表锁共享锁(read)兼容
    • 与表锁排他锁(write)互斥
  • 意向排他锁(IX):由insert、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存储引擎中。

InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。

  1. 行锁(Record Lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。

  2. 间隙锁(Gap Lock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。

  3. 临键锁(Next-Key Lock):行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。 在RR隔离级别下支持。

行锁

  1. 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。
  2. 排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。
S(共享锁)X(排他锁)
S(共享锁)兼容冲突
X(排他锁)冲突冲突

间隙锁 & 临键锁

默认情况下,InnoDB在 REPEATABLE READ事务隔离级别运行,InnoDB使用 next-key 锁进行搜索和索引扫描,以防止幻读。

  • 索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。
  • 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。
  • 索引上的范围查询(唯一索引)–会访问到不满足条件的第一个值为止。

注意:间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁。

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

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

相关文章

【Web后端】web后端开发简介_Servlet简介

1.web后端开发简介 Java企业级开发,也就是学习]avaEE(Enterprise Edition)版本,是一种结构和一套标准。在应用中开发的标准就是Servlet、jsp和JavaBean技术。jsp技术现在已基本处于淘汰状态,简单了解即可web后端开发,基于B/S模式的开发体系。…

系分-历年论文题目

年份试题一试题二试题三试题四2023年信息系统数据转换与迁移敏捷开发方法论Devops及其应用论信息系统可行性分析2022年论原型法及其在信息系统开发中的应用论面向对象设计方法及其应用2021年论面向对象的信息系统分析方法论静态测试方法及其应用论富互联网应用的客户端开发技术…

13、FreeRTOS 事件标志组

文章目录 一、事件组(event group)的特性1.1 什么是事件标注组1.2 事件标注组的场景1.3 事件组的概念1.4 事件组的操作 二、事件组API2.1 创建2.2 删除2.3 设置事件2.4 等待事件2.5 同步点 一、事件组(event group)的特性 1.1 什么是事件标注组 事件标志位:表明某…

2024kali linux上安装java8

1 kali下载Java 8安装包 访问Oracle官网或其他可信的Java下载站点,如华为云的开源镜像站(例如:https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz)。 确保下载的是与你的Kali Linux系统架构&#xf…

Collection工具类

Collection工具类的介绍 Collection 是一个操作Set、List和Map等集合的工具类Collection中提供了一些列静态的方法对集合元素进行排序、查询和修改的等操作 Collection的排序操作(均为Static方法) 1,reverse(List)&…

刷t2、、、

、、 public class ThisTest {public static void main(String args[]) {int i;for (;;) {System.out.println(1);}} } while()的循环条件等于for中循环条件。循环体会有一个条件改变等于for中类似自增条件。while()判断条件一般在while前面会初始化跟for中初始化一样。这样 w…

Linux入门攻坚——23、DNS和BIND基础入门1

DNS——Domain Name Service,协议(C/S,53/udp,53/tcp) BIND——Berkeley Internet Name Domain,ISC(www.isc.org) 互联网络上主机之间的通信依靠的是IP,而人或程序一般使…

GT2512-STBA 三菱触摸屏12.1寸型

T2512-STBA参数说明:12.1"、SVGA 800*600、65536色、TFT彩色液晶显示屏、AC电源、32MB内存 三菱触摸屏GT2512-STBA性能规格详细说明: [显示部] 显示软元件:TFT彩色液晶显示屏 画面尺寸:12.1寸 分辨率:SVGA 80…

Windows10环境搭建http服务器

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

连锁收银系统的五大功能

连锁收银系统是零售行业中不可或缺的工具,它为连锁店铺提供了必要的管理和运营支持。一个完善的连锁收银系统应当具备以下五大功能,以满足不断发展的零售业务需求。 1. 进销存管理 进销存管理是连锁店铺运营的核心,也是连锁收银系统不可或缺…

每日两题 / 101. 对称二叉树 230. 二叉搜索树中第K小的元素(LeetCode热题100)

101. 对称二叉树 - 力扣(LeetCode) 用两个指针同时遍历树的左右子树即可 每次遍历时,一个指针向左,另一个就要向右。一个向右,另一个就要向左 /*** Definition for a binary tree node.* struct TreeNode {* in…

生信人写程序1. Perl语言模板及配置

生物信息领域常用语言 个人认为:是否能熟悉使用Shell(项目流程搭建)R(数据统计与可视化)Perl/Python/Java…(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准。 生物信息常用语言非常广泛,我常用的有…

【C++】学习笔记——模板进阶

文章目录 十一、模板进阶1. 非类型模板参数2. 按需实例化3. 模板的特化类模板的特化 4. 模板的分离编译 未完待续 十一、模板进阶 1. 非类型模板参数 模板参数分为类型形参和非类型形参 。类型形参即:出现在模板参数列表中,跟在class或者typename之类的…

经典权限五张表功能实现

文章目录 用户模块(未使用框架)查询功能实现步骤代码 新增功能实现步骤代码 修改功能实现步骤代码实现 删除功能实现步骤代码实现 用户模块会了,其他两个模块与其类似 用户模块(未使用框架) 查询功能 这里将模糊查询和分页查询写在一起 实现步骤 前端&#xff1…

泵站远程监控

在科技日新月异的今天,智能化管理已经成为各行业提升效率、降低成本的关键手段。特别是在水利领域,泵站作为水资源调配的重要节点,其运行效率和安全稳定性直接关系到整个供水系统的稳定。HiWoo Cloud平台凭借其强大的物联网和云计算技术&…

两重惊喜!奥特曼预告GPT-4和ChatGPT重大更新,Open AI要放大招

OpenAI在今天官宣13日(下周一10点)开启线上直播,将会展示全新的ChatGPT demo的演示以及GPT-4的重大更新! OpenAI首席执行官Sam Altman在X上表示,这些的发布会,公司不会宣布下一代对话式人工智能GPT-5或人工…

游戏安全干货报告干货下载 |《2023年度游戏安全观察与实践报告》

AIGC浪潮从大洋彼岸袭来,使得全球资本市场看好AIGC将对游戏行业“成本”与“效率”带来革命性的变化;年末,国家新闻出版署一次性批准了105款国产游戏版号,为历史之最;全年亦有不少“某某大厂裁撤游戏业务”、“某某游戏…

C语言写扫雷游戏(数组和函数实践)

目录 最后是代码啦! 手把手教你用C语言写一个扫雷游戏! 1.我们搭建一下这个多文件形式的扫雷游戏文件结构 2.在主函数里面设置一个包含游戏框架的菜单 菜单可以方便游戏玩家选择要进行的动作和不断地进行下一局。 3.switch语句连接不同的结果 菜单可…

C++实现一个简单的控制cpu利用率的程序

写一个程序&#xff0c;让控制cpu利用率在20%左右 思路很简单&#xff1a;每个循环控制sleep的时间占比 #include <iostream> #include <chrono> #include <unistd.h>int main() {int ratio 20;int base_time 1000;int sleeptime base_time * (100-ratio…

信息系统架构模型_3.企业数据交换总线

1.企业数据交换总线 实践中&#xff0c;还有一种较常用的架构&#xff0c;即企业数据交换总线&#xff0c;即不同的企业应用之间进行信息交换的公共通道&#xff0c;如图1所示。 图1 企业数据交换总线架构 这种架构在大型企业不同应用系统进行信息交换时使用较普遍&am…