MySQL高级知识(十五)——MySQL锁机制分类

此博客的内容主要来源于尚硅谷的视频中,在此记录,以备以后自己查看。

1. 定义

  • 锁是计算机协调多个进程或线程并发访问某一资源的机制。

  • 在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

2. 事例

打个比方,我们到淘宝上买一件商品,商品只有一件库存,这个时候如果还有另一个人买,
那么如何解决是你买到还是另一个人买到的问题?
MySQL高级知识(十五)——MySQL锁机制分类

这里肯定要用到事务,我们先从库存表中取出物品数量,然后插入订单,付款后插入付款表信息,
然后更新商品数量。在这个过程中,使用锁可以对有限的资源进行保护,解决隔离和并发的矛盾。

3. 锁的分类

锁有两种分类的分法,一种是对数据操作的类型分,一种是对数据操作的粒度分。

3.1. 对数据操作的类型(读/写)分

  1. 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。

  2. 写锁(排他锁):当前写操作没有完成之前,它会阻断其他写锁和读锁。

3.2. 对数据操作的细粒度分

  1. 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

  2. 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

  3. 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般