一,介绍
元数据锁(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;;