【422、MySQL 里行锁和表锁及其特性】

104 阅读1分钟

在 MySQL 中,锁是一种用于协调并发访问数据库资源的机制。MySQL 支持两种类型的锁定:行级锁和表级锁。

  1. 行级锁

行级锁是指在数据库表中对某一行进行独占访问,防止其他事务对该行进行修改或删除。行级锁的特点如下:

  • 行级锁只针对被访问的行进行加锁,不会对整个表进行锁定,从而减少了并发访问时的冲突。
  • 行级锁可以提高并发性,因为当多个事务并发访问同一表的不同行时,它们可以同时进行读取和写入操作,而不会互相干扰。
  • 行级锁的缺点是需要占用更多的内存和 CPU 资源,因为需要对每一行都进行锁定和释放操作。
  1. 表级锁

表级锁是指对整个表进行锁定,防止其他事务对表进行修改或删除。表级锁的特点如下:

  • 表级锁会阻塞其他事务对表的所有操作,包括读取和写入,因此可能会导致并发性降低。
  • 表级锁一般用于少量修改的场景,例如 ALTER TABLE、TRUNCATE TABLE 和 DROP TABLE 等操作。

在 MySQL 中,可以通过以下命令设置行级锁和表级锁:

  • 行级锁:使用 SELECT … FOR UPDATE 或者 SELECT … LOCK IN SHARE MODE 命令可以对查询结果中的行进行锁定。
  • 表级锁:使用 LOCK TABLES 和 UNLOCK TABLES 命令可以对整个表进行锁定和释放。

需要注意的是,锁定过程中应该尽量减少锁的范围和持有时间,避免死锁和性能问题。