mysql 表级锁 和元数据锁(MDL)
表锁的语法是 lock tables … read/write
当本线程 lock table write时,本线程可以对锁住的表进行读写操作,但不能对其它表进行读写操作
对锁住的表进行读写是ok的
但对其它表的读写会产生错误
其它线程不可以读写
其它线程对此表进行读写会被卡住,直到解锁才会执行
可以看到查询和插入都用了很久
当本线程 lock table read时,本线程可以对锁住的表进行读操作,但不能对其它表进行读写操作
其它线程只能查,插入的话会被阻塞
MDL 锁:
MDL不需要显式使用,在访问一个表的时候会被自动加上。MDL的作用是,保证读写的正确性。你可以想象一下,如果一个查询正在遍历一个表中的数据,而执行期间另一个线程对这个表结构做变更,删了一列,那么查询线程拿到的结果跟表结构对不上,肯定是不行的。
因此,在MySQL 5.5版本中引入了MDL,当对一个表做增删改查操作的时候,加MDL读锁;当要对表做结构变更操作的时候,加MDL写锁。
读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。
读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行
将mysql自动提交设为OFF
线程一 select user表 获得读锁
线程二 试图alter表结构,获取写锁,被锁住
线程三 试图select 获取读锁,被锁住
但是多个读锁可以同时存在!
mysql 表级锁 和元数据锁(MDL)相关推荐
- MySQL - 全局锁、表级锁、行级锁、元数据锁、自增锁、意向锁、共享锁、独占锁、记录锁、间隙锁、临键锁、死锁
# 前言 本篇只介绍 MySQL 锁的基本知识. 我的 MySQL 版本是 MySQL 5.7.34, 建议使用 MySQL 5.6 及之后的版本. ## 先上一个图 ## 为什么要使用锁? 个人理解 ...
- mysql面试常问 1: 谈谈MySQL表级锁和行级锁
谈谈MySQL表级锁和行级锁 表级锁与索引无关 行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况 主键索引与 行级锁的关系 非主键索引与行级锁的关系 实验如下: CREATE TABLE ...
- mysql表级锁和行级锁_MySQL表级锁和行级锁
一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- mysql表级锁和行级锁_Mysql的表级锁和行级锁
表级锁 MySQL表级锁分为读锁和写锁. 读锁 用法:LOCK TABLE table_name [ AS alias_name ] READ 释放锁使用UNLOCK tables.可以为表使用别名, ...
- MDL--元数据锁的锁请求与锁等待+元数据锁类对象
1 元数据锁的锁请求与锁等待 元数据锁在MySQL Server层,依照锁的状态被细分为两种.一种是已经施加的锁.一种是等待施加的锁即锁请求,这样被区分的原因,如MySQL对"class M ...
- MySQL表级完整性约束
MySQL表级完整性约束 为防止不符合规范的数据存入数据库,在用户对数据进行插入.修改.删除等操作时,MySQL提供 了一种机制来检查数据库是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种 ...
- MySQL表级锁之表锁
表级锁 表级锁,每次操作锁住整张表.锁定粒度大,发生锁冲突的概率最高,并发度最低.应用在MyISAM.InnoDB.BDB等存储引擎中. 对于表级锁,主要分为以下三类: 表锁 元数据锁(meta da ...
- mysql表级锁和行级锁
表级锁和行级锁对比: 表级锁: Mysql中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁.其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyI ...
- mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁
一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
最新文章
- 独家 | 支持向量机背后的数学 -对于SVM背后的数学和理论解释的快速概览及如何实现...
- 矩阵快速幂求大斐波那契poj3070(java)
- modelsim(1):经常使用的测试设计的结构
- GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
- 截取json字符串算法
- SQLi LABS Less-6 报错注入+布尔盲注
- Andriod开发前准备
- 你真的了解特洛伊木马吗!
- 购买课程赠老男孩出版的签名新书啦!
- 龙芯rtc时间关机重启后不能保存问题分析
- Swift中类型推导(掌握)
- Yii Framework2.0开发教程(4)在yii中定义全局变量
- XMind2TestCase自定义测试用例设计模板
- files函数提取文件名HTML,Excel小技巧之轻松提取文件夹中的文件名
- 傲梅分区助手看不到linux,傲梅分区助手使用教程
- nmds与mds的区别_常见分析方法 | PCA、PCoA和NMDS有什么区别?
- 治近视的秘方!1000度近视降到只有200度
- Python之模拟登录微博下载视频
- 在Isight软件里如何调用matlab子程序?
- 怎样做一个好的网管?
热门文章
- 对于js的async和await的理解分析
- java有async和await吗,理解 JavaScript 的 async/await
- 【Unity Shader】自定义顶点片元着色器解析
- [[NSBundle mainBundle]pathForResource:@name ofType:@type] 获取不到本地文件
- linux误删文件找回方法(xfs文件系统)
- Linux 网站心跳检测 + 通知 shell脚本
- P1063 [NOIP2006 提高组] 能量项链 区间dp
- 习题 17:排队提水问题★★
- 西工大NOJ数据结构理论——010.k阶斐波那契数列(严3.32)
- mx250显卡天梯图_NVIDIA MX250显卡亮相:轻薄本新标配