热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

数据库锁机制通俗易懂介绍

目录一、为什么需要使用锁,什么是锁二、锁有哪些1、按数据操作的粒度来分表锁行锁页锁2、按数据操作的类型来分读锁(共享锁、S锁)写锁(排他锁或互斥锁、X锁)3、按使用方式来分乐观锁悲

目录
  • 一、为什么需要使用锁,什么是锁
  • 二、锁有哪些
    • 1、按数据操作的粒度来分
      • 表锁
      • 行锁
      • 页锁
    • 2、按数据操作的类型来分
      • 读锁(共享锁、S锁)
      • 写锁(排他锁或互斥锁、X锁)
    • 3、按使用方式来分
      • 乐观锁
      • 悲观锁
    • 表锁下的读写操作时:
      • 表锁的特点:
      • 读锁(read lock)
      • 写锁(write lock)
      • 如何上锁:
    • 行锁下的读写操作时:
      • 行锁的特点
      • 读锁(read lock)
      • 写锁(write lock)
      • 意向共享锁(IS)
      • 意向排它锁(IX)
      • 如何上锁
    • 页锁
  • 三、乐观锁和悲观锁
  • 四、行锁的实现算法
    • 1、Record Lock 锁
    • 2、Gap Lock 锁
    • 3、Next-key Lock 锁
  • 五、死锁


一、为什么需要使用锁,什么是锁

官方的介绍:

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统计算资源(CPU、RAM、I\O等)的争抢,数据也是一种供多用户共享的资源。如何保证数据并发访问的一致性,有效性,是所有数据库必须要解决的问题。锁冲突也是影响数据库并发访问性能的一个重要因素,因此锁对数据库尤其重要。

对于上面的几句话介绍什么是锁,相信看了后抽象难以理解,下面我举一个生活中通俗易懂的例子,说明什么是锁,以及为什么需要使用锁。

【工人搬转的例子】



  • 一个工人搬砖时

假如现在一个老板有堆砖头一共有30块左右,需要找人帮忙。随后就找到了A工人搬转。


202202271803

  • 多个工人搬砖时

然后,老板又觉得一个人搬砖太慢了,所以就多叫两个工人,B工人、C工人过来帮忙。


202202271811

  • 多个工人搬砖时,会带来的问题

1、会发现工人们之间,说的砖头数量不一样

假如三个ABC工人同一时间去搬砖的。大家一开始只知道那堆砖头有30块而已。

比如工人去搬5块砖头,心里想搬完5块,还有25块。

接着B工人去搬6块砖头。心里想搬完5块,还有24块。

接着C工人去搬1块砖头。心里想搬完1块,还有29块。

最后老板过来问大家,现在还多少砖头。A工人:25块、B工人:24块、C工人:29块。

一听,这数量不对呀,各说各的,肯定有问题这样。其实真实还有30-12=18块而已,但是工人之间都不知道,大家搬了多少块砖头。



  • 解决多个工人搬砖时,带来的问题

为了解决上述的问题,老板就想了个办法。

A搬砖时,B、C工人不能去搬砖,只有A工人搬完离开,B、C工人才可以去搬砖头。

并且告诉B工人现在还有多少块砖头,B工人和C工人同理。


202202271848

好了,举完这个

推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何使用计算机控制遥控车的步骤和电路制作方法
    本文介绍了使用计算机控制遥控车的步骤和电路制作方法。首先,需要检查发送器的连接器和跳线,以确定命令的传递方式。然后,通过连接跳线和地面,将发送器与电池的负极连接,以实现遥控车的前进。接下来,制作一个简单的电路,使用Arduino命令将连接到跳线的电线接地,从而实现将Arduino命令转化为发送器命令。最后,通过焊接晶体管和电阻,完成电路制作。详细的步骤和材料使用方法将在正文中介绍。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
霸道Q丫头
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有