前言
面试官:MySQL中的锁很多,你能说出来几种?
要是你能完整的回答出来,那就不用往下看了,如果有疑惑,就继续看喽。
锁分类
在 MySQL中锁有很多不同的分类。
从操作粒度看
-
从操作的粒度可分为表级锁、行级锁和页级锁。
-
表级锁:每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB 等存储引擎中。
-
行级锁:每次操作锁住一行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB 存储引擎中。
-
页级锁:每次锁定相邻的一组记录,锁定粒度界于表锁和行锁之间,开销和加锁时间界于表锁和行锁之间,并发度一般。应用在BDB 存储引擎中。
-
从操作类型看
-
从操作的类型可分为读锁和写锁。
-
读锁(S锁):共享锁,针对同一份数据,多个读操作可以同时进行而不会互相影响。
-
写锁(X锁):排他锁,当前写操作没有完成前,它会阻断其他写锁和读锁。
-
IS锁、IX锁:意向读锁、意向写锁,属于表级锁