在mysql数据库中,锁是基于存储引擎的,不同的存储引擎,采用的锁机制是不一样的。
常用存储引擎:MyISAM,MEMORY,InnoDB。
锁的类型:行级锁,页面锁,表级锁
具体对应关系:
存储引擎 | 支持锁的类型 |
---|---|
MYISAM | 表级锁 |
MEMORY | 页面锁 |
INNODB | 行级锁 |
三种锁类型的特性:
表级锁:
开销小,加锁快,不会出现死锁;
锁定粒度大,发生锁冲突的概率最高,并发度低;
行级锁:
开销大,加锁慢,会出现死锁;
锁定粒度小,发生锁冲突的概率最低,并发度最高;
页面锁:
开销,加锁速度位于表级锁和行级锁之间,会出现死锁;
锁定粒度,发生锁冲突的概率位于表级锁和行级锁之间,并发度一般;
-
MyISAM类型的存储引擎只支持表级别的锁,表级锁的工作机制如下:
对MYISAM表的读操作,不会阻塞其它用户对同一张表的读请求,但会阻塞对同一张表的写请求;
对MYISAM表的写操作,则会阻塞其它用户对同一表的读和写操作;MYISAM表的读操作与写操作之间,以及写操作与写操作之间是串行的;当一个线程获得