什麼是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)之間是互斥的鎖。
閱讀更多 十萬個為神麼 的文章