开发者学堂课程【数据库核心概念:锁(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址 :https://developer.aliyun.com/learning/course/63/detail/1147
锁(一)
内容介绍
一、简介
二、锁的分类
一、简介
本课程主要讲解 MySQL 锁机制。
在线程之中存在锁,在数据库当中也存在锁的概念,对于锁的存在有利有弊。锁的弊端在于如果表被锁了,其他数据无法更新查询,那么系统就挂了。类似于在交通层面上,如果一辆车出现刮蹭,就会堵塞交通,产生交通瘫痪。某种情况下,锁也有好处。
在 JAVA 课程当中,卖票的情况下,如果不加锁,用户就会互相争抢。假设数据库在凌晨两点时需要进行数据备份,恢复或容灾处理,此时 JAVA 上的数据的表不希望再有变更,防止其他用户变更,需要首先加上锁,防止别人改动。由此可得所有利有弊,必须将其一分为二而看。
对于锁的概念定义如下:
锁是计算机协调多个进程或线程并发访问某一资源的机制。也就是为了防止争抢。在数据库中,除传统的计算资源(如CPU、RAM、I/O等) 的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说锁对数据库而言显得尤其重要,也更加复杂。
例如,在淘宝上买一件商品, 商品只有一件库存,这个时候如果还有另-一个人买,那么如何解决是你买到还是另一个人买到的问题?如图所示:
如果是真实下单的情况就需要用到锁,要用到事务,我们先从库存表中取出物品数量,然后插入订单,付款后插入付款表信息,然后更新商品数量。在这个过程中,使用锁可以对有限的资源进行保护,解决隔离和并发的矛盾。以上内容在基础内容当中有所讲解。
二、锁的分类
将锁分为两种。第一种从对数据操作的类型分类,分为写锁和读锁:
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
例如在课堂当中,教学软件购物享软件之后,学生端屏幕上显示教室屏幕内容,也就是教师端桌面同步,多位同学可以同时观看各自屏幕,而互不干涉。
写锁(排它锁) :当前写操作没有完成前,它会阻断其他写锁和读锁。例如在教师端写字时,同学不能进行书写。
从对数据操作的力度来分,分为表锁和行锁。