千家信息网

MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!背景:最近在测试lock
千家信息网最后更新 2026年10月31日MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些

小编给大家分享一下MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

背景:最近在测试lock table xxx read与DML之间的锁等待测试,突然发现mysql5.6与mysql5.7的show full processlist与show engine innodb status \G的显示不相同
一个为 wait for table lock 而另外一个则是waiting for table metadata lock,甚是费解,于是就去追查了下 。

现象描述:
1.MySQL5.6
SESSION 1:


SESSION 2:


show full processlist与show engine innodb status \G的输出(显示为waiting for table level lock)



2.MySQL 5.7
SESSION 1:


SESSION 2:


show full processlist与show engine innodb status\G(显示为waiting for table metadata lock)





分析:
在MySQL5.6中,我们从show engine innodb status以及show full processlist中都能看到状态为waiting for table level lock,说明是一个事物表级锁
而在MySQL5.7中,我们只从show full processlist看到了锁等待,是waiting for table metadata lock,说明这是一个metadata lock(元数据锁)而不是一个事物锁
按本人对5.6理解是,session1语句lock table locktest1 read在MDL阶段会加上MDL_SHARED_READ,而session2的update语句在MDL阶段会加MDL_SHARED_WRITE,因此在MDL阶段不会冲突,接下来,session1会在locktest1表上上S锁(表锁),而session2会在locktest1表上加IX锁,由于IX锁与session1的表级锁S锁冲突,故而在等待,结果为waiting for table level lock;然而如下5.7的显示是waiting for metadata lock,是发生在MDL阶段的锁等待,这让我很费解,是MySQL5.7锁机制改变了呢?还是oracle官方的一个显示bug(按理来说,oracle不会出现这么低级的错误)?
从mysql5.7.3起,在performance_schema库中新增了metadata_locks表,用来监控MDL(metadata lock)的锁情况,我们来追踪一下:


从图中,我们看出,MySQL5.7对于lock table locktest1 read 加的是SHARED_READ_ONLY(而MySQL5.7新增的类型),与update语句的SHARED_WRITE互斥,导致了update在MDL阶段等待,所以状态为waiting for table metadata lock。
那为什么SHARED_READ_ONLY会与SHARED WRITE 互斥呢?我们从源代码中找出描述,如下:
/*
A shared metadata lock for cases when we need to read data from table
and block all concurrent modifications to it (for both data and metadata).
Used by LOCK TABLES READ statement.
*/
MDL_SHARED_READ_ONLY,

即: MDL_SHARED_READ_ONLY会阻止所有的并发修改,(包括数据以及元数据)。

看完了这篇文章,相信你对"MySQL5.6与MySQL5.7中语句lock table ...read加锁的区别有哪些"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

语句 阶段 数据 费解 事物 状态 篇文章 冲突 测试 上上 低级 相同 接下来 之间 完了 官方 情况 更多 机制 源代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 上海睿民互联网科技有限公司 广州大一互联网络科技有限公司 互联网科技工作委员会主任 互联网巨头科技公司 互联网下的科技发展 互联网 卓越科技 互联网科技革命 鑫亿盛互联网科技 四个字互联网科技公司取名 互联网科技公司的市场部门 以后互联网后是啥科技 贵州叶脉互联网科技有限公司所属行业 深圳市优智互联网科技有限公司 互联网金融科技元年 山东星卡互联网科技有限公司官网 互联网相关科技技术 宁波跨境商互联网科技有限公司 互联网科技自媒体灵感 知域互联网科技有限公司官网 互联网与新科技 互联网科技的英文 奇酷互联网络科技公司 火传媒上海互联网科技 互联网科技公司做什么 赶超互联网科技 微信多开 广州富喜互联网络科技 吉林省码上互联网科技电话 绵阳真晨互联网科技有限公司 优雇互联网科技有限公司
0