MySQL进阶之锁(表级锁,元数据锁,意向锁)

表级锁

介绍

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、 InnoDB、BDB等存储引擎中。

对于表级锁,主要分为以下三类:

  • 表锁

  • 元数据锁(meta data lock,MDL)

  • 意向锁

表锁

对于表锁,分为两类:

  • 表共享读锁(read lock)

  • 表独占写锁(write lock)

语法:

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

  • 释放锁:unlock tables / 客户端断开连接 。

特点:

A.读锁

 

左侧为客户端一,对指定表加了读锁,不会影响右侧客户端二的读,但是会阻塞右侧客户端的写。

 

 B.写锁

 

 左侧为客户端一,对指定表加了写锁,会阻塞右侧客户端的读和写。

 

 

读锁不会阻塞其他客户端的读,但是会阻塞写。写锁既会阻塞其他客户端的读,又会阻塞 其他客户端的写。

元数据锁

MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维 护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与 DDL冲突,保证读写的正确性。

这里的元数据,大家可以简单理解为就是一张表的表结构。 也就是说,某一张表涉及到未提交的事务 时,是不能够修改这张表的表结构的。

在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变 更操作的时候,加MDL写锁(排他)。

SQL锁类型说明
lock tables xxx read / writeSHARED_READ_ONLY / SHARED_NO_READ_WRITE
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都互斥

 

如上图,开启一个事务之后,可以对两个客户端进行查询,更新操作,因为共享锁之间是兼容的,所以可以进行操作。

 

 

在提交一个事务后,执行力select语句就会自动添加

SHARED_READ这个共享读锁,由于它与EXCLUSIVE互斥,所以在左侧提交事务之后才可以更新表结构。

我们可以通过下面的SQL,来查看数据库中的元数据锁的情况:

select object_type,object_schema,object_name,lock_type,lock_duration from
performance_schema.metadata_locks ;

意向锁

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

通过示意图简单分析一 下:

首先客户端一,开启一个事务,然后执行DML操作,在执行DML语句时,会对涉及到的行加行锁。

 

 

当客户端二,想对这张表加表锁时,会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就 会从第一行数据,检查到最后一行数据,效率较低。

有了意向锁之后 :

客户端一,在执行DML操作时,会对涉及的行加行锁,同时也会对该表加上意向锁。

 而其他客户端,在对这张表加表锁的时候,会根据该表上所加的意向锁来判定是否可以成功加表锁,而 不用逐行判断行锁情况了。

 

 

分类
  • 意向共享锁(IS): 由语句select ... lock in share mode添加 。 与 表锁共享锁 (read)兼容,与表锁排他锁(write)互斥。

  • 意向排他锁(IX): 由insert、update、delete、select...for update添加 。与表锁共 享锁(read)及排他锁(write)都互斥,意向锁之间不会互斥。

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

 

如上图所示,意向共享锁与表读锁是兼容的;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1元竟能驱动170万次AI推理?面壁智能MiniCPM 2B大模型,部署教程 移动端 安卓 苹果 ios android

在科技日新月异的今天,我们似乎习惯了“更新换代”的节奏。但你有没有想过,那些陪伴我们多年的老手机,也能摇身一变成为AI神器?面壁智能的MiniCPM 2B大模型,就给我们带来了这样的惊喜。 你可能不知道,这个仅有20亿参数的大模型,却拥有“越级打怪”的实力。与业内知名的…

如何搭建私有云盘SeaFile并实现远程访问本地文件资料

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-hsDnDEybLME85dTx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Web自动化测试理论知识

1、自动化测试概述 概念:用工具代替/辅助人工完成完成软件测试活动的过程 特点: 可以对程序的新版本自动执行回归测试 可以执行一些手工测试困难或不可能进行的测试 可以更好地利用资源 测试具有一致性和可重复性 误区: …

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…

树莓派与Win11通信【一对一】(四)

树莓派与Win11通信【一对一】(四) 树莓派与Win11通信【一对一】(四)的代码优化版, 最近给代码添加了打开摄像头与否的验证,以及文件的保存,定时拍摄 1.Server端 import socket import time …

【数据结构 09】哈希

哈希算法:哈希也叫散列、映射,将任意长度的输入通过散列运算转化为固定长度的输出,该输出就是哈希值(散列值)。 哈希映射是一种压缩映射,通常情况下,散列值的空间远小于输入值的空间。 哈希运…

Axure 动态面板初使用 - 实现简单的Banner图轮播效果

实现简单的Banner图轮播效果 使用工具版本实现的效果步骤过程 使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure工具,从元件库拖个动态面板到空白页; 2、给面板设置一个常用的banner尺寸,举个栗子:343151(移动端我常用…

Scratch:引领孩子们步入编程世界的魔法石

Scratch,一款由麻省理工学院(MIT)开发的面向儿童的编程软件,以其独特的交互性和直观性,正逐渐成为孩子们学习编程的首选工具。它不仅降低了编程的门槛,还激发了孩子们对编程的浓厚兴趣,为未来的…

查看阿里云maven仓中某个库有哪些版本

起因 最近项目上有做视频业务,方案是使用阿里云的短视频服务,其中也有使用到阿里云的上传SDK,过程中有遇一个上传SDK的内部崩溃,崩溃栈如下: Back traces starts. java.lang.NullPointerException: Attempt to invok…

【Leetcode】目前300题,大部分二刷,总感觉自己是在背答案一样,怎么破?

1,一开始学习的时候,就是刚学完数据结构算法,刚开始做题,说实话,一个easy题目都需要半个小时,甚至好几个小时,非常正常,因为这个阶段你是在学习,不是在做题,要…

Nonterrestrial Networks (NTN) for 5G and Beyond

Overview In this paper, we’ll take a look at the current state of NTNs, some of the new applications being explored, and crucially, the technical challenges that we’ll need to overcome to make it a viable market. Finally, we’ll get an overview of the w…

2024 年 10 款最佳免费无限的数据恢复软件工具

十大无限的数据恢复软件工具 数据丢失可能是一场噩梦,无论是由于意外删除、系统崩溃还是硬件故障。值得庆幸的是,有多种数据恢复软件工具可以帮助您检索珍贵的文件和文档。在本文中,我们将探讨可以拯救世界的十大最佳免费无限数据恢复软件工…