表锁的语法是 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)相关推荐

  1. MySQL - 全局锁、表级锁、行级锁、元数据锁、自增锁、意向锁、共享锁、独占锁、记录锁、间隙锁、临键锁、死锁

    # 前言 本篇只介绍 MySQL 锁的基本知识. 我的 MySQL 版本是 MySQL 5.7.34, 建议使用 MySQL 5.6 及之后的版本. ## 先上一个图 ## 为什么要使用锁? 个人理解 ...

  2. mysql面试常问 1: 谈谈MySQL表级锁和行级锁

    谈谈MySQL表级锁和行级锁 表级锁与索引无关 行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况 主键索引与 行级锁的关系 非主键索引与行级锁的关系 实验如下: CREATE TABLE ...

  3. mysql表级锁和行级锁_MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  4. mysql表级锁和行级锁_Mysql的表级锁和行级锁

    表级锁 MySQL表级锁分为读锁和写锁. 读锁 用法:LOCK TABLE table_name [ AS alias_name ] READ 释放锁使用UNLOCK tables.可以为表使用别名, ...

  5. MDL--元数据锁的锁请求与锁等待+元数据锁类对象

    1 元数据锁的锁请求与锁等待 元数据锁在MySQL Server层,依照锁的状态被细分为两种.一种是已经施加的锁.一种是等待施加的锁即锁请求,这样被区分的原因,如MySQL对"class M ...

  6. MySQL表级完整性约束

    MySQL表级完整性约束 为防止不符合规范的数据存入数据库,在用户对数据进行插入.修改.删除等操作时,MySQL提供 了一种机制来检查数据库是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种 ...

  7. MySQL表级锁之表锁

    表级锁 表级锁,每次操作锁住整张表.锁定粒度大,发生锁冲突的概率最高,并发度最低.应用在MyISAM.InnoDB.BDB等存储引擎中. 对于表级锁,主要分为以下三类: 表锁 元数据锁(meta da ...

  8. mysql表级锁和行级锁

    表级锁和行级锁对比: 表级锁: Mysql中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁.其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyI ...

  9. mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

最新文章

  1. 独家 | 支持向量机背后的数学 -对于SVM背后的数学和理论解释的快速概览及如何实现...
  2. 矩阵快速幂求大斐波那契poj3070(java)
  3. modelsim(1):经常使用的测试设计的结构
  4. GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
  5. 截取json字符串算法
  6. SQLi LABS Less-6 报错注入+布尔盲注
  7. Andriod开发前准备
  8. 你真的了解特洛伊木马吗!
  9. 购买课程赠老男孩出版的签名新书啦!
  10. 龙芯rtc时间关机重启后不能保存问题分析
  11. Swift中类型推导(掌握)
  12. Yii Framework2.0开发教程(4)在yii中定义全局变量
  13. XMind2TestCase自定义测试用例设计模板
  14. files函数提取文件名HTML,Excel小技巧之轻松提取文件夹中的文件名
  15. 傲梅分区助手看不到linux,傲梅分区助手使用教程
  16. nmds与mds的区别_常见分析方法 | PCA、PCoA和NMDS有什么区别?
  17. 治近视的秘方!1000度近视降到只有200度
  18. Python之模拟登录微博下载视频
  19. 在Isight软件里如何调用matlab子程序?
  20. 怎样做一个好的网管?

热门文章

  1. 对于js的async和await的理解分析
  2. java有async和await吗,理解 JavaScript 的 async/await
  3. 【Unity Shader】自定义顶点片元着色器解析
  4. [[NSBundle mainBundle]pathForResource:@name ofType:@type] 获取不到本地文件
  5. linux误删文件找回方法(xfs文件系统)
  6. Linux 网站心跳检测 + 通知 shell脚本
  7. P1063 [NOIP2006 提高组] 能量项链 区间dp
  8. 习题 17:排队提水问题★★
  9. 西工大NOJ数据结构理论——010.k阶斐波那契数列(严3.32)
  10. mx250显卡天梯图_NVIDIA MX250显卡亮相:轻薄本新标配