原文 https:// developer.aliyun.com/ar ticle/778217?spm=a2c6h.21072623.J_4429179800.2.5b483e04Kb9ie2&utm_content=g_1000213343
索引和锁是数据库中的两个核心知识点,隔离级别的实现都是通过锁来完成的
按照锁颗粒对锁进行划分 ?
锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别为行锁、页锁和表锁。
- 行锁就是按照行的粒度对数据进行锁定。锁定力度小,发生锁冲突概率低,可以实现的并发度高,但是对于锁的开销比较大,加锁会比较慢,容易出现死锁情况。
- 页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。页锁的开销介于表锁和行锁之间,会出现死锁。锁定粒度介于表锁和行锁之间,并发度一般。
- 表锁就是对数据表进行锁定,锁定粒度很大,同时发生锁冲突的概率也会较高,数据访问的并发度低。不过好处在于对锁的使用开销小,加锁会很快。
还有区锁和数据库锁.
![ff29393fa7f681998285e9f9f739078d.png](https://img-blog.csdnimg.cn/img_convert/ff29393fa7f681998285e9f9f739078d.png)
每个层级的锁数量是有限制的,因为锁会占用内存空间