【数据库】封锁技术

2023-10-31

一、前言:

    数据库的并发操作通常会带来三个问题:丢失更新、读脏数据、不可重复读。解决这些问题就需要用到数据库的封锁机制进行控制,但封锁机制的引入又引起了一系列问题:性能下降、死锁等。

    1、丢失更新:一个事务的更新覆盖了其他事务的更新结果。例如用户A把值从8改到了5,用户B把值从5改到了8,则用户A丢失了它的更新。

    2、读脏数据:事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,事务T1由于某种原因被撤销,这时事务T1修改过的数据恢复原值,事务T2读到的数据就和数据库中的数据不一致,是错误的数据。又称“脏”数据。

    3、不可重复读:事务T1读取数据后,事务T2执行了更新操作。而事务T1使用的仍然是更新前的值,造成了数据不一致性。

        为了解决这些并发操作带来的问题。我们需要引入并发控制。主要方法是封锁技术。


二、封锁技术:

    锁分为两种:一种是排他型锁(X锁),另一种是共享型锁(S锁)。

    1、排他锁:若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的所。直到T释放A上的锁。可见X锁只允许一个事务独锁某个数据,具有排他性。

    2、共享锁:若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加上S锁,这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A进行任何修改。(允许并发读,但不允许修改。)


三、封锁协议:

    1、一级封锁协议:事务在修改数据A之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以解决丢失更新问题。(事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。)

    2、二级封锁协议:在一级封锁协议的基础上,加上事务T在读数据A之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议可以解决读“脏”数据的问题。

    3、三级封锁协议:在一级封锁协议的基础上,加上事务T在读数据A之前必须先对其加S锁,直到事务结束时释放S锁。三级封锁协议除了防止丢失更新和读“脏”数据外,还进一步防止了不可重复读。


四、总结:

    最近了解到了乐观锁和悲观锁。知道它们和共享锁、排他锁一样,都能解决丢失更新、读脏数据、不可重复读的问题。但是对于乐观锁、悲观锁和共享锁、排他锁的区别还不甚了解。。。期望大牛前来指导。

 

       



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据库】封锁技术 的相关文章

  • DTO 的替代品

    点击 终码一生 关注 置顶公众号 每日技术干货 第一时间送达 数据传输对象是在进程之间承载数据的对象 使用它的动机是进程之间的通信通常通过远程接口完成 其中每次调用都是昂贵的操作 由于每次调用的大部分成本都与客户端和服务器之间的往返时间有关
  • I/Q信号

    当前的数字射频芯片 无一例外的用到了I Q信号 就算是RFID芯片 内部也用到了I Q信号 然而绝大部分射频人员 对于IQ的了解除了名字之外 基本上一无所知 I Q信号一般是模拟的 也有数字的比如方波 基带内处理的一般是数字信号 在出口处都
  • centos 普通用户操作 supervisor 报错

    当我们在centos系统中使用普通用户操作supervisor时 可能会有以下权限问题 error
  • vue---el-upload使用FormData多文件同时上传

    需求描述 使用el upload 手动上传方式进行文件上传 https element eleme cn zh CN component upload 当选择上传多个文件时 选择几个文件就会向后台发送几次请求 先后台要求同时一次请求发送多个
  • 基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证

    目录 1 算法运行效果图预览 2 算法运行软件版本 3 部分核心程序 4 算法理论概述 5 算法完整程序工程 1 算法运行效果图预览 将gamma 2 2和gamma 1 2 2的数据分别导入到matlab进行对比 2 算法运行软件版本 m
  • 华为OD机试真题- 不含101的数【2023Q2】【JAVA、Python、C++】

    题目描述 小明在学习二进制时 发现了一类不含101的数 也就是 将数字用二进制表示 不能出现101 现在给定一个正整数区间 请问这个区间内包含了多少个不含101的数 输入描述 输入的唯一一行包含两个正整数 输出描述 输出的唯一一行包含一个整
  • 树莓派教程 - 1.1 树莓派GPIO库wiringPi 硬件PWM可调频率

    Git例程源码仓库 https github com ZhiliangMa raspberry git 使用到的硬件 led 200 左右的电阻 杜邦线 上一节使用最基本的 GPIO数字输出 led亮了 可如果想要调整led亮度怎么办 PW
  • 【C/C++面试必备

    作者 Linux猿 简介 CSDN博客专家 华为云享专家 Linux C C 云计算 物联网 面试 刷题 算法尽管咨询我 关注我 有问题私聊 关注专栏 数据结构和算法成神路 精讲 优质好文持续更新中 欢迎小伙伴们点赞 收藏 留言 一个由 c
  • 【快速部署一个k8s单节点】

    1 初始化脚本 bin bash swapoff a sed i r swap s etc fstab systemctl stop firewalld service systemctl disable firewalld service
  • 【C 练习】不创建临时变量,交换两个整数的值(异或实现)

    首先我们先来看两个算式 由此可以得出 1 任何数异或自己本身等于0 2 任何数异或0等于它本身 接下来分析算式
  • 机器学习之单变量线性回归(Linear Regression with One Variable)

    1 模型表达 Model Representation 我们的第一个学习算法是线性回归算法 让我们通过一个例子来开始 这个例子用来预测住房价格 我们使用一个数据集 该数据集包含俄勒冈州波特兰市的住房价格 在这里 我要根据不同房屋尺寸所售出的
  • 第九章 关系查询处理和查询优化

    第九章 关系查询处理和查询优化 9 1 关系数据库系统的查询处理 9 1 1 查询处理步骤 查询分析 对查询语句进行扫描 词法分析和语法分析 词法分析 从查询语句中识别出正确的语言符号 语法分析 进行语法检查 查询检查 合法性检查 视图转换
  • 【表格合并单元格】vue-elementul表格动态合并实现方法,合并行,合并列方法【详细讲解,看完就理解】

    功能 这个elementul表格单元格合并功能是很多地方会用到的 但是官方文档那个有点看的不明白 这里详细讲一下 这里包含有一个行的合并方法 一个列的合并方法 都是详细注释了的 讲解了他的规则 看完后就知道怎么用这个了 效果图 这里是合并的
  • DC-DC---升压斩波电路(BOOST)

    直流升压电路电路 原理图 工作波形 工作原理 分析升压斩波电路的工作原理时 首先假设电路中电感L值很大 电容C值也很大 当可控开关V处于通态时 电源E向电感L充电 充电电流基本恒定为I 同时电容C上的电压向负载R供电 因C值很大 基本保持输
  • LVM逻辑卷 (图文详细教程)

    目录 一 磁盘逻辑卷管理概念介绍 二 LVM逻辑卷管理命令 三 fdisk 常用命令 四 操作 1 安装LVM需要的插件 一般都自带了 2 查看磁盘 3 磁盘分区 PE 4 PV物理卷 5 VG卷组 6 LV逻辑卷 7 文件系统创建 8 挂
  • <mvc:annotation-driven/>与<mvc:default-servlet-handler/>之间的关系问题

    在做项目的时候 我希望静态资源由WEB服务器默认的Servlet来处理 所以我在配置文件中添加了如下的语句
  • 当删除oracle数据库user时发生row cache lock 等待事件

    在oracle数据库中做的动作如下 drop user abc hang住 等待事件为 row cache lock Hanganalyze 显示 Chains most likely to have caused the hang a C
  • Redis BoundValueOperations 接口文档 RedisTemplate整合 Boot

    BoundValueOperations 接口文档 因为官方文档并没有对方法的描述 源码里面也没有注释 所以在下面增加一份方法作用描述 方法中的 V K均为String BoundValueOperations
  • 阿里云ECS(CentOS 7.3)的搭建过程

    一 安装JDK和配置环境变量 1 创建jdk安装目录 创建过则跳转即可 mkdir p usr local src 2 使用wget命令下载jdk包 wget no check certificate no cookies header C

随机推荐

  • 数组中常用的方法

    一 push 方法和 pop 方法 push 方法用于向数组末尾添加一个或多个元素 并返回修改后的数组的新长度 const fruits 苹果 香蕉 const res fruits push 橘子 西瓜 console log fruit
  • Vue + Element UI+Scss + Vuex一键换肤 , 一键换字体大小 ,动态替换全局主题颜色

    一 前言 其实我这个写法每个UI库都通用 不局限于ElementUI 看明白思路就知道怎么写了 一键换肤 动态替换全局主题颜色功能已经实现很久了 在项目验收的时候出现了一个小问题 想改动一下 于是来记录一下 前段时间公司项目里需要实现一键换
  • get 和 post 的区别

    使用场景 GET请求一般用于向服务器请求数据 POST请求一般用于向服务器提交数据 请求参数的位置 GET请求通常将参数放在URL的 query 中 POST 请求通常会将数据放在请求体 body 中 GET请求通常将参数放在URL的 qu
  • unity 2D中,实现点击按钮可以游戏暂停的效果

    在Unity 2D中 可以通过以下步骤和代码来设置一个按钮 实现游戏暂停的效果 创建一个空对象 命名为 GameManager 用于管理游戏状态 在GameManager对象上添加一个脚本 命名为 PauseManager 在脚本中添加以下
  • 简述“自顶向下,逐步求精”——面向过程程序设计方法

    引入 所谓 自顶向下 逐步求精 的程序设计方法 网络上有着如下的说法 一者是百度百科所述 另一者则为维基百科的说法 自顶向下设计 一种逐步求精的设计程序的过程和方法 对要完成的任务进行分解 先对最高层次中的问题进行定义 设计 编程和测试 而
  • C# 联合Halcon开发的完整项目案例(三套完整源码)附下载连接

    C 联合Halcon开发的完整项目案例 三套完整源码 点我下载三套项目源码 1 C 联合Halcon开发的程序 一整套源码 相机点胶定位 图像采集 数据查询相机间通讯具体情况如下图所示 案例注释详细 方便二次开发 2 C Halcon Vi
  • 从零开发校园商铺平台(SSM到SpringBoot)一.开发准备,实体类设计与表创建

    依山傍水房树间 行也安然 住也安然 一条耕牛半顷田 收也凭天 荒也凭天 雨过天晴驾小船 鱼在一边 酒在一边 夜晚妻子话灯前 今也谈谈 古也谈谈 日上三竿犹在眠 不是神仙 胜似神仙 一 开发准备 创建maven项目 解决项目报错 新增pom
  • Chrome插件(扩展)开发全攻略

    目录 写在前面 仓库说明 前言 什么是Chrome插件 学习Chrome插件开发有什么意义 为什么是Chrome插件而不是Firefox插件 开发与调试 核心介绍 manifest json content scripts backgrou
  • qRegisterMetaType

    如果要在Qt信号槽中使用自定义类型 需要注意使用qRegisterMetaType对自定义类型进行注册 当然在不跨线程时使用自定义类型signal slot来传递 可能不会出现什么问题 一旦涉及跨线程就很容易出错 回想下信号槽的作用就是用来
  • 机器学习——朴素贝叶斯分类器及sklearn实现

    前言 参考 机器学习 简单介绍朴素贝叶斯分类器 机器学习专栏 机器学习专栏 文章目录 一 贝叶斯定理 二 贝叶斯分类法 三 sklearn实现贝叶斯分类 一 贝叶斯定理 贝叶斯定理 Bayes theorem 是概率论中的一个定理 描述在已
  • Metasploit search参数

    msfvenom 参数 q快速启动msf 不显示banner信息 x加载模块代码 p payload lt payload gt 指定需要使用的payload 攻击荷载 也可以使用自定义payload 几乎是支持全平台的 l list mo
  • ThinkPHP3.2.3关闭调试模式及做些修改

    1 首先在入口文件中关闭调试模式 开启调试模式 建议开发阶段开启True 部署阶段注释或者设为false define APP DEBUG false 2 修改 Conf config php 异常页面的模板文件 TMPL EXCEPTIO
  • Cookie与Session深入理解(一)——Cookie

    基本操作 HttpServletRequest request HttpServletResponse response 1 获取cookies Cookie cookieList request getCookies 2 根据cookie
  • 力扣312题:戳气球

    力扣312题 戳气球 题目描述 有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 戳破第 i 个气球 你可以获得 nums i 1 nums i nums i 1 枚硬
  • 机器学习深度学习数据集大汇总

    寻找一个好用的数据集需要注意一下几点 数据集不混乱 否则要花费大量时间来清理数据 数据集不应包含太多行或列 否则会难以使用 数据越干净越好 清理大型数据集可能非常耗时 应该预设一个有趣的问题 而这个问题又可以用数据来回答 数据集发布平台 A
  • linux安装pycharm详细步骤

    一 用xftp远程根据把解压后的安装包文件上传到指定目录 opt module 然后 cd opt module pycharm community linux 2018 1 4 bin 执行以代码 chmod u x pycharm sh
  • C++小游戏---坦克大战(二)(加入传送门)--附完整代码

    目录 素材整理 穿越草地 坦克穿越草地 子弹穿越草地 传送门 判定形式 生成传送门 传送坦克 关卡模式 效果展示 总结 完整代码 上一篇坦克大战居然意外获得了一些关注 正好最近也完善了一些功能 同时也加入了一些自己想到的新元素 主要是关于穿
  • 基于Matlab实现图像去噪技术(附上完整源码+图像+程序运行说明)

    图像去噪是数字图像处理中一个重要的问题 它的目标是恢复由于噪声引起的图像质量下降 噪声可以由各种原因引起 如图像传感器的不完美性能 图像传输过程中的干扰等 在实际应用中 图像去噪技术被广泛应用于医学图像处理 计算机视觉 图像识别等领域 本文
  • vim

    three basic mode of vim command mode also is default mode all the alphanumeric keys are bound to commands Typing dd will
  • 【数据库】封锁技术

    一 前言 数据库的并发操作通常会带来三个问题 丢失更新 读脏数据 不可重复读 解决这些问题就需要用到数据库的封锁机制进行控制 但封锁机制的引入又引起了一系列问题 性能下降 死锁等 1 丢失更新 一个事务的更新覆盖了其他事务的更新结果 例如用