【四十五、MySql】进阶篇--锁--表级锁(元数据锁)

元数据锁(MDL)在MySQL5.5中引入,用于维护表元数据一致性,防止DML与DDL冲突。查询时加读锁,表结构变更时加写锁。在并发事务中,共享读锁与共享读锁兼容,但写锁会阻塞其他读写操作,直到锁释放。可以使用`performance_schema.metadata_locks`来查看MDL信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,介绍
元数据锁(meta data lock,MDL)
MDL加锁过程中是系统自动控制,无需显示使用,在访问一张表的时候会自动加上。作用是维护表元数据的一致性。【如果某一张表存在未提交的事务,那么不能去修改这张表的表结构。为了避免DML(增删改查)与DDL(定义数据库表字段)语句的冲突,保证读写的正确性。】

在MySql5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他)
在这里插入图片描述
二,演示
1,共享锁
在窗口console3中开启事务,执行查询操作,此时已经为表自动加上共享读锁shared_read,未提交事务;
在窗口console4中开启事务,执行更新操作,此时已经为表自动加上共享写锁shared_write;
shared_read与shared_write是兼容的,所以在console3未提交事务的前提下,console4中的更新操作是可以执行的。
在这里插入图片描述
在这里插入图片描述
2,排他锁
在窗口console3中开启事务,执行查询操作,此时已经为表自动加上共享读锁shared_read,未提交事务;
在窗口console4中开启事务,执行更改表结构操作,此时已经为表自动加上排他锁exclusive,此时发现console4中的操作是阻塞的,当console3提交事务的时候,元数据锁释放,console4才会执行成功。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三,查看元数据锁
语法:select OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE,LOCK_DURATION from performance_schema.metadata_locks;;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值