Bootstrap

MySQL 中有哪几种锁?

  1. 表锁(Table Locks)

    • 描述:表锁是锁定整个表,防止其他事务对表进行修改。
    • 类型
      • 共享锁(Shared Locks):允许多个事务同时读取表中的数据,但不允许写操作。
      • 排他锁(Exclusive Locks):只允许一个事务对表进行写操作,阻止其他事务的读和写操作。
  2. 行锁(Row Locks)

    • 描述:行锁是锁定表中的特定行,而不是整个表。
    • 类型
      • 共享锁(Shared Locks):允许多个事务读取同一行数据,但不能修改。
      • 排他锁(Exclusive Locks):禁止其他事务读取或修改同一行数据。
  3. 页锁(Page Locks)

    • 描述:页锁锁定数据库表中的一个页(通常是4KB大小)。
    • 用途:页锁主要用于BDB存储引擎,InnoDB存储引擎不使用页锁。
  4. 意向锁(Intention Locks)

    • 描述:意向锁是InnoDB存储引擎中的一种内部锁机制,用于协调不同粒度的锁。
    • 类型
      • 意向共享锁(Intention Shared Locks, IS):事务打算在表的某几行上加共享锁。
      • 意向排他锁(Intention Exclusive Locks, IX):事务打算在表的某几行上加排他锁。
  5. 全局锁(Global Locks)

    • 描述:全局锁锁定整个数据库实例。
    • 用途:主要用于数据库的备份和恢复操作,如FLUSH TABLES WITH READ LOCK
  6. 元数据锁(Metadata Locks, MDL)

    • 描述:元数据锁锁定表或索引的元数据,以防止在DML操作(如INSERT、UPDATE、DELETE)期间修改表结构。
    • 类型
      • 共享元数据锁(Shared Metadata Locks):允许多个事务同时读取元数据。
      • 排他元数据锁(Exclusive Metadata Locks):只允许一个事务修改元数据。

这些锁的类型和用途不同,但共同目的是确保在并发环境中数据的一致性和完整性。InnoDB存储引擎默认使用行级锁,因为它提供了比表锁更高的并发性和更好的性能。

;