【613、行锁表锁全局锁。共享锁排他锁意向锁。update、delete、insert、select for update 加排他锁,select lock i

25 阅读2分钟

在数据库中,常见的锁类型包括行锁、表锁和全局锁。除此之外,还有共享锁、排他锁和意向锁等概念。

  1. 行锁:锁定表中的单个数据行,用于处理单行数据的并发访问问题。在MySQL中,行锁是通过InnoDB存储引擎来实现的,通过在索引上加锁或者直接锁定记录来实现。
  2. 表锁:锁定整个表,用于处理多行数据的并发访问问题。表锁对于高并发的数据库来说可能不是一个好的选择,因为它会限制其他会话对同一张表的访问。
  3. 全局锁:锁定整个数据库实例,用于备份或恢复数据库等操作。全局锁会阻止任何会话修改任何表或者数据,所以它会导致系统出现停顿或者停止响应。
  4. 共享锁:也称为读锁,用于允许多个会话同时读取同一份数据。共享锁可以被多个会话共享,但不能与排他锁同时持有。
  5. 排他锁:也称为写锁,用于确保只有一个会话可以对数据对象进行修改。当一个会话持有排它锁时,其他会话既不能读取也不能写入该数据对象。
  6. 意向锁:用于指示会话将要对某个数据对象加什么类型的锁。意向锁分为意向共享锁和意向排他锁,用于协调多个会话对同一个数据对象的锁请求。

在MySQL中,可以通过以下语句来给一张表加锁:

  • SELECT ... FOR UPDATE:用于在查询时加排他锁,以防止其他会话同时修改该数据对象。
  • SELECT ... LOCK IN SHARE MODE:用于在查询时加共享锁,以允许其他会话同时读取该数据对象。
  • UPDATE、DELETE、INSERT:在执行这些语句时,MySQL会自动给涉及的数据对象加上排它锁,以防止其他会话同时修改该数据对象。

需要注意的是,过度使用锁可能会导致性能下降和死锁的发生。因此,在使用锁时,需要仔细考虑锁的类型、范围和时间,并根据实际情况进行权衡和优化。