当前位置: 首页 > news >正文

有关数据库的一级、二级、三级封锁协议

一级封锁协议

  • 一级封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK).
  • 一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
  • 在一级封锁协议中,如果仅仅是读数据而不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

丢失修改:不加锁修改之后被其它事务修改了
写:加X锁->修改数据R->成功或失败->释放X锁

读:不加锁,导致读到别的事务未提交数据,且多次读结果不一致

二级封锁协议

  • 二级封锁协议是指,在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁=。
  • 二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据。
  • 在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读

写:同一级封锁协议
读:加S锁->读数据R->读完释放S锁,不会读到别的事务未提交的数据,但多次读会结果还是会不一致
注:在数据R加了X锁之后,不能再加其它锁(其它事务的X锁和S锁);在数据R加了S锁之后,其它锁还能加S锁,但不能加X锁

三级封锁协议

  • 三级封锁协议是指,在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
  • 三级封锁协议除了防止丢失修改和读“脏”数据外,还进一步防止了不可重复读。

写:同一级封锁协议
读:加S锁->读数据R->再读数据R->事务完成->释放S锁,多次读结果一致

四、不同级别的封锁协议和一致性保证

在这里插入图片描述

内容补充

X锁(排他锁、写锁)

S锁(共享锁、读锁)

在这里插入图片描述

http://www.lryc.cn/news/27087.html

相关文章:

  • 【Android Studio】【学习笔记】【2023春】
  • window.open()下载文件重命名/js下载文件重命名/js跨域下载文件重命名
  • zookeeper:简介及常用命令
  • 与流程挖掘布道者熵评科技孙一鸣博士共话流程挖掘市场的起源与前景 | 爱分析访谈
  • 第十一届蓝桥杯省赛——2解密
  • ChatGPT解答:PYQT5 美化各种控件的方案和实例
  • js实现翻盘抽奖
  • Qt QtCreator 安卓开发环境搭建
  • Flutter知识点(二)处理Json
  • 基本概念简介(码率,FPS(帧数),分辨率,RTMP协议)等的介绍
  • 黑盒测试重点复习内容
  • Python每日一练(20230303)
  • 基于Cortex-M7内核STM32F767NIH6,STM32F767VGT6,STM32F767VIT6嵌入式技术资料
  • Nginx SSL证书A+之路
  • 周期性温度和压力波的PID自动控制解决方法
  • 从头开始搭建一个SpringBoot项目--SpringBoot文件的上传与下载
  • It做形式主语和宾语
  • 做测试一定要知道的——软件测试流程和测试规范标准文档
  • Linux下将一个文件压缩分包成多个小文件
  • 分享5款用了一段时间,个人觉得非常nice的软件
  • 搜广推 Product-based Neural Networks (PNN) - 改进特征交叉的方式
  • IDEA2022 配置spark开发环境
  • 趣味答题竞赛小程序开发功能的详细介绍
  • 【独家】华为OD机试提供C语言题解 - 获取最大软件版本号
  • k8s编程operator实战之云编码平台——⑤项目完成、部署
  • C语言杂记(指针篇)
  • ES window 系统环境下连接问题
  • hexo部署github搭建个人博客 完整详细带图版(更新中)
  • SpringBoot集成DruidDataSource实现监控 SQL 性能
  • maven镜像源及代理配置