【数据库管理】十分钟了解啥是三级封锁协议、X锁和S锁

news2024/9/27 15:23:25

一.为什么要用锁

        在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为“并发操作”,此时数据库管理系统的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,同时避免用户得到不正确的数据。

        如果并发不受控制,则数据库的多个事务并发操作(不加任何锁)会引发一系列数据不一致的问题,突出的问题有以下几个:

  • 多个事务同时处理同一个事务,导致数据更新丢失问题:

        事务T取到数据A后进行数据处理,期间事务Y也取了数据A进行处理,导致事务T的结果被事务Y的结果覆盖。

  • 多个事务同时处理同一个事务,导致数据出现不可重复读取问题:

 

        事务T读取数据A后,事务Y也读取了数据A,并且进行了数据处理和更新,这时事务T 有点不放心所以重新校验了数据A,再次确保数据没问题,这时候发现数据A已经被修改了,出现前后数据不对等,同一个数据不可重复读取的问题。

  • 多个事务同时处理同一个事务,导致数据出现读取脏数据问题:

        事务Y在进行数据处理并且更新了数据A,事务T在期间读取了一下数据A,但是后面事务Y突然后悔了,连夜将数据A恢复会原值,这就导致了事务T拿到的数据是事务Y的一个过程数据,是个脏的不干净的数据。

二.有哪些锁

         为了有效抑制以上的问题,现在规定多个事务并发时不能随随便便就对数据进行处理(不能一过来直接拿着数据就走),要针对数据的读取和修改,增加两把锁(我们称之为排他锁和共享锁),用于给数据上锁,当事务要用到数据时,就给数据加上锁,提醒别的事务有人占用这个数据了!

  • 排他锁(也叫X锁)

        作用是禁止并发操作

        当事务T对数据A加上排他锁后,其他事务要等事务T解除X封锁后,才能对数据A进行重新上锁,保证了其他事务在事务T释放A上的锁之前,不能对数据A进行任何操作,这里需要注意的是,加上排他锁不是直接限制读和写,而是限制上锁

  • 共享锁(也叫S锁)

        作用是允许其他事务查询但不允许修改
        当事务T对数据A加上共享锁后,其他事务只能对A加共享锁,而不能加排他锁,直到事务T释放数据A上的共享锁,这里值得注意的是,加上共享锁不是直接限制写,是限制其他事务上排他锁

三.什么是封锁协议

        有了这两把锁之后,新的问题又出现了:

  1. 怎么知道什么情况下要用什么锁?
  2. 什么时候要用锁?什么时候不用?
  3. 上锁之后什么时候解锁最合适?
  4. ……

        而神奇的“三级封锁协议”,就是为了告诉你什么情况下用什么锁可以解决什么问题,只要事务们都按照协议的规则去做,就可以避免诸如更新丢失、读取脏数据或者不可重复读取数据等问题。

        至此,你应该明白一个潜在的含义:锁本身只限制其他事务对数据的加锁权限,而限制事务对数据的读写操作,是通过锁+封锁协议来实现的

四.一级封锁协议

        一级封锁协议的定义如下:事务T 在修改数据A之前必须先对其加上排他锁(不加锁直接修改数据是被禁止的,一定要加锁),直到事务结束才释放

        如果事务们都遵守一级协议的话,就可以避免更新丢失的问题:

         但一级封锁协议不能解决读取脏数据重复读取数据的问题,原因在于一级封锁协议中只规定了事务们在修改数据时才需要加上锁,而没有规定只读取不改数据时也要加上锁!所以一级封锁协议的漏洞就在于如果你只读不改的话是可以不用加锁的!并且也是可以直接读取成功的!这就导致一级封锁协议不能解决读取脏数据和重复读取数据的问题,因为其他事务可能在任何时间不加锁的情况下进行数据读取。

五.二级封锁协议

        二级封锁的定义是:在一级封锁协议的基础上,加上事务Y 在读取数据A之前先对其加共享锁,读完后即可释放共享锁

        如果事务们都遵守二级协议的话,就可以避免丢失数据修改(一级封锁协议带过来的),因为事务Y在读取期间加上了共享锁,导致其他事务在这期间都不能对数据进行修改,只能读取,从而防止了读“脏”数据(二级封锁协议的好处)。

        但二级封锁协议不能解决不可重复读取的问题,原因在于二级封锁协议在读取数据之后,立即释放S锁,之后其他事务仍有可能对数据进行修改,然后如果该事务又读取数据来进行核对的话,就有可能读到不一致的结果。 

六.三级封锁协议

        三级封锁的定义是:在一级封锁协议的基础上,加上事务Y 在读取数据A之前先对其加共享锁,知道整个事务全部完成后才释放共享锁

         三级封锁协议直到事务结束才释放,可以有效防止丢失修改、防止读“脏”数据与防止数据重复读。

七.总结

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring框架概括

spring是什么? Spring是2003年兴起的,它是一个轻量级的,非侵入式的IOC和AOP的一站式框架,为简化企业级应用开发。 它的特点: 轻量级:指的是核心jar包比较小的。 非侵入式的:框架代码不会侵入…

Java——《面试题——MQ篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

KingFusion3.6是什么?

哈喽,大家好,我是雷工! 今天继续学习KingFusion3.6,以下为学习笔记。 一、KingFusion3.6简介 1、管控一体化全组态平台KingFusion3.6是一款面向工业企业执行层的生产信息化管理系统。 2、KingFusion3.6基于“全组态”技术&#…

使用ROS功能包camera_calibration进行单目相机和双目相机的内参和外参标定

1.概述 本文总结使用ROS标定单目和双目相机的过程,同时提供生成棋盘格文件的方法。 参考链接: [1]使用ros标定相机的内参和外参 [2]ROS下采用camera_calibration进行双目相机标定 2.生成棋盘格文件 棋盘格可以自己买一个,或者打印一个粘在…

日本团队推出 AI 恋爱游戏:主角穿什么,玩家说了算

女主穿什么,还能由玩家决定?! IT之家6月25日消息,来自日本的一个两人团队近期发布了一段视频,展示了一款正在开发中的基于 AI 的恋爱游戏。 在游戏初期,女主角会以黑色剪影的形式出现,针对女主…

紫云谷游记

先说重点,TLNR 1.早点去,方便找地方停车,坐渡船不用排队太久。 2.景区里的饭没外面的好吃。 3.溯溪回来再在游泳池游泳,溯溪凉快,游泳太晒。 4.溯溪真的好爽。 导航: 紫云谷乘船码头停车场 景区介绍就不多说…

常见电池容量概念

嵌入式软件做产品一定要考虑功耗问题 功耗是多少,装上电池能用多久。 1、毫安时和毫瓦时 毫安时(mAh)和毫瓦时(mWh)是两个不同的物理量,它们分别表示电量和能量的度量单位。下面图片搜18650得到不同结果&…

Elasticsearch介绍与应用

Elasticsearch介绍与应用 Elasticsearch的官方文档。 Elasticsearch官网参考文档:https://www.elastic.co/guide/index.html Elasticsearch官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch mvnrepository依赖库地址:http…

你对工作队列了解多少?Linux中断处理中的workqueue介绍

Linux中断处理中的workqueue介绍 一、workqueue的作用及在Linux中断处理中的应用1.1、workqueue的概述1.2、workqueue在Linux中断处理中的作用 二、workqueue的实现原理2.1、工作队列和工作者线程的关系2.2、工作队列的创建和销毁2.3、工作者线程的创建和销毁2.4、扩展知识&…

2023年的今天,谨慎进入网络安全行业

前言 2023年的今天,慎重进入网安行业吧,目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多,还有很多高中被挖过来的大佬。 理由很简单,目前来说,信息安全的圈子人少,985、211院校很多都才建…

低代码没前途?那是你“盲盒”没拆好

创新本质是什么?一是让昂贵的东西变得便宜,老百姓能用;二是高门槛东西变得低门槛,普通人可用。琢磨着,这不就是说低代码吗? 低代码:让人找不到工作? 低代码无疑成为开发业务的一种…

基于java springboot博客管理系统设计和实现

基于java springboot博客管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录 …

前端技术到底是深度重要,还是广度重要?

前言 前几天跟朋友讨论“技术广度和技术深度哪个重要”,再想想自己像过山车一般的前端历程,有感而发,想给小兄弟们一些建议~ 为什么会有这个疑问? 还记得两年前,甚至是一年前,当时想要找到一份好工作&am…

API 网关 vs 负载均衡:选择适合你的网络流量管理组件

由于互联网技术的发展,网络数据的请求数节节攀升,这使得服务器承受的压力越来越大。在早期的系统架构中,通常使用负载均衡来将网络流量平摊到多个服务器中,以此减轻单台服务器的压力。但是现如今,后端服务的种类在不断…

STM32-ADC模拟数字转换器

ADC 1、简介1.2、逐次逼近型ADC1.3 ADC基本结构转换模式触发控制数据对齐转换时间(针对高转换速率)校准硬件电路 2、软件编写初始化 1、简介 1、ADC(Analog-Digital Converter)模拟-数字转换器 2、ADC可以将引脚上连续变化的模拟…

【MySQL学习笔记】(一)MySQL数据库基础

MySQL数据库基础 1 MySQL 连接服务器指令2 mysql 和mysqld的区别3 数据库存储 VS 文件存储4 初次使用数据库 理解数据库是什么4.1 使用数据库4.2 小总结 5 主流数据库6 SQL分类7 存储引擎 1 MySQL 连接服务器指令 mysql -h 127.0.0.1 -P 3306 -u root -p-h 指明登录部署了mysq…

Vue3 简介

Vue3简介 01 Vue vue 是一个前端的框架,主要负责帮助我们构建用户的界面MVVM:Model - View - View Modelvue 负责 vm 的工作(视图模型),通过 vue 可以将视图和模型相关联。 当模型发生变化时,视图会自动更…

Quartus 实例应用(1)——EDA技术概述

EDA 技术概述 一、EDA技术及其发展二、Top-down 设计与 IP 核复用2.1 Top-down 设计2.2 Bottom-up 设计2.3 IP 复用技术与 SoC 三、数字设计的流程3.1 设计输入3.2 综合3.3 布局布线3.4 仿真3.5 编程配置 我们已经进入数字化和信息化的时代,其特点是各种数字产品的广…

UM2082F08三通道低频无线唤醒ASK接收芯片

UM2082F08 是基于单周期 8051 内核的超低功耗 8 位、 具有三通道低频无线唤醒 ASK 接收功能的 SOC 芯片。芯片可检测 30KHz~300KHz 范围的 LF(低频)载波频率数据并触发唤醒信号,同时可以调节接收灵敏度,确保在各种应用环境下实现可…

Python(request)爬虫有多强大

Python 的 requests 库是一个非常强大的网络爬虫工具,可以帮助开发人员快速,高效地从各种网站获取信息并处理数据。以下是 requests 库的一些强大功能: 1. 简单易用:requests 库的 API 设计合理,易于学习和使用。使用 …