MySQL的表级锁

       📝个人主页:五敷有你      

 🔥系列专栏:面经

⛺️稳中求进,晒太阳

表级锁

介绍

对于表锁,分为两类:

  • 表共享读锁
  • 表独占写锁

语法

1. 加锁:lock tables 表名... read/write

2. 释放锁:unlock tables /客户端断开。

特点:

1)读锁:不影响所有客户端的读,但会阻止所有客户端的写。

如图加了读锁后,进行操作。

结果显示,加了读锁不会影响所有客户端的读,但是会阻塞客户端的写。

2)写锁:会阻塞其他客户端的读,又会阻塞 其他客户端的写。

如图加了写锁,进行操作。

结果显示:加了写锁不会影响本客户端的写和读,但其他客户端无法读写。

元数据锁(meta data lock,MDL)

        MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维 护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与 DDL冲突,保证读写的正确性。

        这里的元数据,大家可以简单理解为就是一张表的表结构。 也就是说,某一张表涉及到未提交的事务 时,是不能够修改这张表的表结构的。

意向锁

        为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行 数据是否加锁,使用意向锁来减少表锁的检查。