表级锁
Table Lock(表锁)是一种数据库锁(Lock)机制,用于控制并发访问数据库表的操作。当一个会话对表进行操作时,会自动获取相应的锁,以确保其他会话无法同时修改该表的数据,从而维持数据库的一致性和完整性。
MySQL中的表级锁(Table-Level Lock)是对整个表进行锁定的一种机制。当表被锁定后,其他事务不能对该表进行写操作,部分情况下也不能进行读操作,具体取决于锁的类型。表级锁的实现简单,但并发性能较低,因为它会锁定整个表,导致其他事务的等待和阻塞。
关于数据库锁机制的详解:数据库的锁机制
表级锁的类型
MySQL 的表级锁主要分为以下几种类型:
-
表锁(Table Lock)
-
读锁(Read Lock):也称为共享锁(Shared Lock)(S锁),允许其他事务读取该表,但不允许写入。
-
写锁(Write Lock):也称为排他锁(Exclusive Lock)(X锁),不允许其他事务读取或写入该表。
-
-
元数据锁(Metadata Lock, MDL)
- 主要用于避免
DML
(数据操纵语言)与DDL
(数据定义语言)之间的冲突。当对表进行增删改查操作时,会自动加上MDL
读锁;当要对表结构进行变更时,会加上MDL
写锁。
- 主要用于避免
-
意向锁(Intention Lock)
- 包括意向共享锁(IS)和意向排他锁(IX)。它们主要用于表明事务将来可能需要的锁类型,以减少表锁的判断成本。
加锁语句
使用 LOCK TABLE
语句手动为一个或多个表设置表锁,以确保在事务执行期间其他会话无法对这些表进行读写操作:
LOCK TABLES table_name [AS alias] lock_type
[, table_name [AS alias] lock_type]..