mysql锁

2023-11-09

想要了解锁,必须要知道mysql事务,以及mysql事务产生的并发问题

数据库中的事务,隔离级别,以及数据展示_華同学.的博客-CSDN博客

1.Mysql锁的介绍


锁是计算机协调多个线程或进程并发访问某一资源的机制。除传统的计算机资源(CPU,RAM,I/O)的争用,数据也是一种提供许多用户共享的资源。如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。

2.全局锁

MySQL 的全局锁是一种特殊的锁,它可以锁住整个数据库实例,防止其他线程对数据库进行任何修改操作。全局锁可以用来保证数据备份的一致性,因为在备份的过程中,需要保证数据库的数据不发生变化。

在 MySQL 中,可以使用 FLUSH TABLES WITH READ LOCK 命令来获取全局锁。执行这个命令后,所有的表都会被锁住,只有当前线程可以进行读操作,其他线程无法进行任何修改操作(修改不行,读行)。当备份完成后,可以使用 UNLOCK TABLES 命令释放全局锁。 

 语句:

MySQL 提供了多种全局锁定方式,包括:

  1. FLUSH TABLES WITH READ LOCK:该语句可以锁定所有表,并防止其他线程对表进行写操作,但允许其他线程进行读操作。

  2. FLUSH TABLES WITH READ LOCK AND DISABLE CHECKPOINT:该语句可以锁定所有表,并防止其他线程对表进行写操作,但允许其他线程进行读操作。此外,该语句还可以禁用检查点,以提高性能。

  3. LOCK TABLES:(表锁)该语句可以锁定指定的表,并防止其他线程对表进行读写操作。

演示:

开启两个客户端,一个加上全局锁,另一个可以进行读取操作,但是不能够修改 (会阻塞,知道UNLOCK TABLES解锁)

 修改操作,阻塞状态

 2.表级锁

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

主要分为以下三类:

1.表锁

2.元数据锁(meta data lock,mdl)

3.意向锁

1.表锁:

1.表共享读锁(读锁)

2.表独占写锁 (写锁)(排他锁)

语法:

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

2.释放锁:unlock tables / 客户端断开连接

 1.表共享读锁:

 当客户端1:加上表读锁,所有客户端都是可以进行读取的,但不能写(自己也不行)

 

 可见,加上表共享读锁:自己和其他线程都可以进行读操作,但是自己写的话报错,(表‘my_table’加上读锁并且不能修改),其他客户端写形成堵塞状态!

 2.表独占写锁

 

 客户端1自己能够读和写,但是客户端2读的话就会进行阻塞,更别说些了。

 

 2.元数据锁(meta data lock,mdl)

 元数据锁:MDL加锁过程是系统自动控制,不用显示使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL(进行定义/改变表的结构、数据类型、表之间的链接等操作)冲突,保证读写的正确性。

 元数据锁是一种特殊的锁定类型,用于锁定数据库对象的元数据信息,例如表格结构、索引等。元数据锁可用于管理并发 DDL 操作,以确保这些操作的原子性和一致性。与表级锁不同,元数据锁的作用范围更广,可以覆盖多个表格或数据库对象

 1.MDL_SHARED_READ

该级别的锁允许多个会话同时读取一个对象,并防止其他会话更改该对象的结构或元数据。如果另一个会话想要修改该对象,则必须等待之前的锁被释放

2.MDL_SHARED_WRITE

该级别的锁允许一个会话向一个对象添加新的读锁,但同时防止其他会话更改该对象的结构或元数据。如果另一个会话想要修改该对象,则必须等待最后一个读锁被释放。

3.MDL_EXCLUSIVE

该级别的锁只允许一个会话独占一个对象,并防止其他会话读取或修改该对象的结构或元数据。如果另一个会话想要获取该对象的任何类型的锁,则必须等待独占锁被释放。

在使用元数据锁时,需要注意以下几点:

  1. 元数据锁是自动管理的,不需要手动获取或释放。系统会根据需要自动获取和释放锁定。
  2. 与表级锁不同,元数据锁不会阻止读取操作。多个会话可以同时读取一个对象,并且他们之间不会产生冲突。
  3. 元数据锁可能会影响性能,尤其是在进行大量并发 DDL 操作时(基本不会,都设计好了)。因此,在设计数据库架构时,应该考虑将 DDL 操作限制到必要的最小集合中。

 元数据锁详解MySQL 元数据锁(MDL)_Leon_Jinhai_Sun的博客-CSDN博客

3.意向锁

 首先:客户端1开启一个事务:里边修改了一条数据,但是没有提交(修改一条数据,会自动加上行锁),但是客户端2进行了表锁,锁住了整张表,添加表锁(读/写)前,会自动逐一行排查有没有行锁,(这种客户端效率很慢),所以:客户端1在添加行锁的同时会添加意向锁,那么客户端2就会直接判断意向锁(不用逐一排查)。

 

 意向锁(Intention Locks)是 MySQL 中的一种锁定机制,用于管理事务中多个对象之间的关系,并确保并发访问的正确性。意向锁是表级锁和行级锁之间的一个桥梁,它向其他会话显示当前会话将要获取的锁类型,以防止死锁或不必要的等待。

1.意向共享锁(IS): 与表锁共享锁(read)兼容(我读,你们也可以读)

                                    与表锁排它锁(write)互斥(我读,你们就不能写·)

2.意向排他锁(IX): 与表锁共享(read)以及排它锁(read)都互斥。(我写,你读写都不行)

                                       意向锁之间不会互斥(我写,你也可以写,看谁写的快)

 select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;

1. 意向共享锁(Intention Shared Lock,IS)

它表示当前会话将要获取一个共享锁,但不会阻止其他会话获取这个锁类型。意向共享锁通常用于管理多个事务之间的关系,并确保并发操作的正确性。

2.意向排他锁(Intention Exclusive Lock,IX)

 意向排他锁表示当前会话将要获取一个独占锁,并且可能会阻止其他会话获取相同的或更低级别的锁。如果已经有任何类型的锁,则无法获取意向排它锁。

在使用意向锁时,需要注意以下几点:

  1. 意向锁不会直接锁定任何对象,而只是告诉其他会话当前会话要获取哪种类型的锁
  2. 意向锁是自动管理的,不需要手动获取或释放。系统会根据需要自动获取和释放锁定
  3. 意向锁可以减少死锁的发生,因为它向其他会话显示当前会话将要获取的锁类型,从而使其他会话能够更好地协调并避免产生冲突。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql锁 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 区块链学习路线图!

    分享关于区块链的学习的大致方向和路线
  • [519]matplotlib(二)

    3D 散点图绘制 scatter from mpl toolkits mplot3d import Axes3D import numpy as np from matplotlib import pyplot as plt 生成3D示例数
  • 虚拟化技术基础汇总(特全,初学者值得一看)

    虚拟化意味着应用程序可以使用一个资源 而不必担心它驻留在哪里 技术接口是什么 它是如何实现的 它使用的平台以及它有多少可用 里克 F 范德兰斯 目录 一 什么是虚拟化 1 虚拟化概念 2 虚拟化的类型 服务器虚拟化 网络虚拟化 桌面虚拟化
  • Pandas--DataFrame修改值

    pandas要修改值先需要了解DataFrame的一些知识 此处参照的是pandas的官方文档 When setting values in a pandas object care must be taken to avoid what
  • STM32学习笔记

    STM32笔记 STM32笔记 ADC TIM定时器 定时中断基本结构 代码配置 PWM PWM初始化 EXTI外部中断 NVIC基本结构 EXIT简介 代码配置 GPIO输出 单独操作输出数据寄存器的某一位的方法 GPIO8种模式 代码操
  • wireshark:界面介绍

    菜单栏 文件 打开文件集 保存包 导出HTTP对象 编辑 清除所有标记的包 忽略包和时间属性 视图 查看 隐藏工具栏和面板 编辑Time列 重设颜色 跳转 捕获 分析 创建显示过滤器宏 查看启用协议 保存关注解码 统计 创建图表并打开各种协
  • 网络空间安全进入动态防御时代

    现代计算机网络中包括各种各样的设备和软件 这些设备和软件存在着大量的未知和已知漏洞 漏洞是安全问题的根本 在漏洞面前 攻守双方并不平等 一个弱点被黑客利用 最终可以导致危险在整个网络扩散 漏洞具有的高威胁性 突发性 高破坏性 大规模性的主要
  • Introduction to Data-Centric AI 以数据为中心的人工智能导论

    文章目录 前言 一 Data Centric AI vs Model Centric AI 二 Label Errors and Confident Learning 1 引入库 2 读入数据 总结 前言 本博客笔记来源于MIT的课程 In
  • keil5安装出现error:A1023E等信息

    这是因为在安装的时候没有将环境变量配置好 应该配置如下
  • 国家大力发展集成电路,是否意味着微电子行业在中国前景可以?

    集成电路是信息化 数字化的基石 是全球信息产业的基础 用于通信 安防 军事 工业 交通 消费电子等领域 现在的消费电子 互联网 数字图像 网络通信 云计算 大数据 人工智能发展都得靠它 而在国家安全 经济 日常生活中是不可或缺的 如果是这种
  • 前端笔试题

    目录 1 选择器的优先级 从上往下依次降低 是 2 下述有关 border none 以及 border 0 的区别 描述错误的是 3 关于a元素 以下说法正确的有 4 History对象的属性或方法描述正确的是 5 在HTML5中 为in
  • Matlab中的点数据生成图

    目录 简单的背景介绍 尝试plot3 构造矩阵 遍历填充 无优化版遍历填充 优化后的遍历填充 简单的背景介绍 今天蠢师弟用comsol导出了一个模拟数据 用matlab打开一看是一个数据长度 189739 3 189739 3 189739
  • 嵌入式物联网毕业设计选题智能图像识别项目-stm32mp157 linux开发板

    stm32mp157开发板FS MP1A是华清远见自主研发的一款高品质 高性价比的Linux 单片机二合一的嵌入式教学级开发板 开发板搭载ST的STM32MP157高性能微处理器 集成2个Cortex A7核和1个Cortex M4 核 A
  • R语言第八次课堂小测 rattle的应用(包括rattle的安装)

    题目 安装rattle 并使用rattle 用三种聚类方法对鸢尾花数据集进行聚类 步骤一 修改镜像源 首先 在Rstudio上打开如下界面 进入后 找到packages 再点击change 下图是已经更换了的截图 选择中国的任意一个镜像 最
  • ./configure之后报错

    首先要看报的错误是什么 一般从第一条开始解决 因为有可能下面的错误是由上面的导致的
  • js 判断变量类型(完整版),包括ES6 新类型Symbol

    欢迎来到Altaba的博客 相信大家在开发中遇到需要判断变量类型的问题 js变量按存储类型可分为值类型和引用类型 值类型包括Undefined String Number Boolean 引用类型包括object Array Functio
  • 股票和期货的区别(股指期货1个点赚多少钱)

    股票和期货的辨别 股票的最后含意即是说不妨表明你购置了这家公司的股子 而期货 则是买卖两边按照各自对目标物的将来价钱预期 以此刻的价钱签署的合约 观念既是仍旧领会了 那咱们就再领会一下这几个的辨别 1 目标物 目标物也即是买卖东西 菜商场里
  • 【深度学习】SETR:基于视觉 Transformer 的语义分割模型

    Visual Transformer Author louwill Machine Learning Lab 自从Transformer在视觉领域大火之后 一系列下游视觉任务应用研究也随之多了起来 基于视觉Transformer的语义分割正
  • OpenMMLab AI实战营第二期(2)MMPose初体验

    根据MMPose的官方文档学习一下 MMPose文档地址 https mmpose readthedocs io zh CN latest index html 文章目录 1 概述 2 安装 2 1 创建conda环境并激活 2 2 安装p
  • mysql锁

    想要了解锁 必须要知道mysql事务 以及mysql事务产生的并发问题 数据库中的事务 隔离级别 以及数据展示 華同学 的博客 CSDN博客 1 Mysql锁的介绍 锁是计算机协调多个线程或进程并发访问某一资源的机制 除传统的计算机资源 C