MySQL-mdl锁

什么是MDL锁?

MDL锁是MySQL5.5中新加的MetaDataLock,主要目的是为了保证DML和DDL并发执行时的数据一致性问题。在5.1版本中,一个事务在执行查询或数据更新操作的时候,另外一个事务可以修改表的结构,这样会导致数据的不一致。

MDL锁是在哪一次实现的?

由于MySQL是Sever-Engine的结构。由于MDL锁需要对所有的存储引擎都生效,所以肯定只能在Server层实现。

MDL锁是如何工作的?

MySQL中的锁都有自己的类型,主要的锁类型有Share锁和Exclusive锁,也就是共享锁和排它锁。MySQL的MDL锁的实现更加复杂,它的锁的分类更细。主要说最常见的几种场景:

1)普通的select语句会对表加MDL_SHARE_READ类型的锁;

2)普通的update语句会对表加MDL_SHARE_WRITE类型的锁;

3)DDL语句会对表加MDL_EXCLUSIVE类型的锁。

所以,1)和2)是可以共享的锁,不会冲突; 1)2)和3)之间是互斥的锁。


分享到:


相關文章: