Mysql的锁类型有哪些?

锁的分类:

1.基于锁的属性分类:共享锁、排他锁。

2.基于锁的粒度分类:行级锁(innodb)、表级锁(innodb、myisam)、页级锁(innodb)、记录所、间隙锁、临键锁。

3.基于锁的状态分类:意向共享锁、意向排他锁。


锁的介绍:

1.共享锁(share lock):共享锁又称读锁,简称S锁;当一个事务为数据加上读锁之后,其他事务只能对该数据加读锁,而不能加写锁,直到所有的读锁释放之后其他事务才能对其加写锁。共享锁的特性主要是为了支持并发的读取数据,读取数据时不支持修改,避免出现重复读的问题。

2.排他锁(exclusive lock):排他锁又称写锁,简称X锁;当一个事务为数据加上写锁之后,其他请求不能再为数据加任何锁,直到该锁释放后,其他事务才能对数据进行加锁。排他锁的目的是在数据修改的时候,不允许其他人同时修改数据,也不允许其他人读取数据,避免了出现脏数据和脏读的问题。

3.表锁(table lock):表锁是指上锁的时候锁住的是整个表,当下一个事务访问该表时,必须等前一个事务释放了锁才能对该表进行访问。特点:粒度大,加锁简单,容易冲突。

4.行锁:行锁是指上锁的时候锁住的是表的某一行或多行记录,其他事务访问同一张表时,只有被锁住的记录不能访问,其他的记录可以正常访问。特点:粒度小,加锁比较麻烦,不容易冲突,相比表锁支持的并发要高。

5.记录锁:记录锁也是行锁中的一种,只不过记录锁只能锁住表中的某一条记录,记录锁是说事务在加锁之后数据可以避免在查询的时候被修改的重复读问题,也避免了在修改的事务未提交前被其他事务读物的脏读问题。

6.页锁:页级锁是Mysql中粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多;行级锁冲突少,但速度慢。所以取了折衷的页级锁,一次锁定相邻的一组记录。特点:开销和加锁时间介于表锁和行锁之间,会出现死锁;锁的粒度介于表锁和行锁之间,并发度一般。

7.间隙锁:是属于行锁的一种。间隙锁是在事务加锁后其锁住的是表记录的一个区间,当表的相邻id之间出现空隙则会形成一个区间,遵循左开右闭的原则。范围查询并且查询未命中记录,查询条件必须命中索引,间隙锁只会出现在REPEATABLE_READ(重复读)的事务级别中。

8.临键锁:也属于行锁的一种,并且它是InnoDB的行锁默认算法,总结来说他就是记录锁和间隙锁的组合,临键锁会把查询的记录锁住,同时也会把该范围查询内的所有间隙空间也锁住,再之它会把相邻的下一个区间也锁住。

更多精彩内容关注博客原站:盐鱼律己

你可能感兴趣的:(Mysql,mysql,数据库,java)