MySQL有哪些锁?

MySQL主要有以下三种锁:

  1. 表锁(Table Lock):顾名思义,它锁定的是整个表。这是MySQL中最基本的锁策略,它会锁定整个表,让其他所有的写操作(插入、删除、更新)和可能读取不同版本数据的读操作等待,直到锁被释放。例如,当对一张表进行写操作时,需要对其加表锁,这期间其他任何人都无法对表进行修改,可以进行读取。
  2. 行锁(Row Lock):行锁是MySQL中最细粒度的锁,它可以锁定一行数据。行锁能够最大程度地支持并发处理(同时也带来了最大的锁开销)。比如,当我们更新一条数据时,只有这条数据被锁住,不会影响到其他行的操作。
  3. 页锁(Page Lock):页锁是介于表锁和行锁之间的锁策略,它锁定的是数据库的某一”页”,这个”页”中包含了很多行。页锁的开销和死锁可能性介于表锁和行锁之间。

这三种锁各有优缺点。表锁开销小,加锁快,不会出现死锁,锁定粒度大,发生冲突的概率最高,并发度最低。行锁开销大,加锁慢,会出现死锁,锁定粒度小,发生冲突的概率最低,并发度也最高。页锁则介于两者之间。

发表评论

后才能评论