数据库原理之并发控制的基本概念

我们今天继续来看数据库原理,我们简单讲讲数据库的并发控制。


并发控制的定义

并发控制是为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。并发控制的主要技术有:、时间戳、乐观控制法、多版本并发控制等。

并发操作带来的数据不一致性主要有以下三点:

  1. 丢失修改:两个事务T1和T2 读入同一数据并修改,T2 提交的结果破坏了 T1提交的结果,导致T1 的修改被丢失。
  2. 不可重复读:指事务T1读取数据后,事务T2 执行更新操作,使T1 无法再现前一次读取结果。
  3. 读脏数据:事务T1 修改某一数据后并将其写回磁盘,事务T2读取同一数据后,T1 由于某种原因被撤销,这时T1 修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致。

并发控制的基本方法

并发控制的基本方法有排他锁和共享锁

排他锁的定义:若事务T对数据对象A加上X锁,则只允许事务T读取和修改A。事务T释放A上的锁之前:其他事务不能读取和修改A,不能再对A 加任何类型的锁。

共享锁的定义:若事务T对数据对象A加上S锁,则事务T可以读取A,但不能修改A。事务T释放A上的S锁之前: 其他事务可以读取A,可以对A加S锁,但不能修改A,也不能对A加X锁

封锁协议

封锁协议有三级,分别叫一级封锁协议、二级封锁协议、三级封锁协议

  1. 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
  2. 二级封锁协议:事务T在修改数据R之前必须先对其加锁(一级封锁协议),并且其他事务在取数据之前必须先对其加S锁,读完后即可释放S锁。
  3. 三级封锁协议:事务T在修改数据R之前必须先对其加锁(一级封锁协议),并且其他事务在读取数据之前必须先对其加S锁,直到事务结束才释放(二级封锁协议是读完就能释放)

活锁和死锁

活锁

活锁:事务T1封锁了数据R,事务T2又请求封锁R,于是T2 等待;T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了 T3 的请求,T2 仍然等待,T4 又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4 的请求.......T2 有可能永远等待,产生活锁。

避免活锁的方法:先来先服务策略

死锁

这里的死锁和操作系统当中的死锁不一样。这里的死锁是事务T1 封锁了数据R1,T2 封锁了数据 R2,T1 又请求封锁R2,因T2 已封锁了 R2,于是T1 等待T2释放R2上的锁,接着T2 又申请封锁 R1,因T1 已封锁了 R1,T2 也只能等待T1,释放R1 上的锁,这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁。

死锁的预防

  • 一次封锁法:每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
  • 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务按这个顺序实施封锁。

死锁的诊断与解除

诊断:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁或构建事务等待图存在回路。

解除:选择一个处理死锁代价最小的事务,将其撤销(UNDO),释放此事务持有的所有的锁。

可串行化调度 

定义:多个事务并发执行的结果=这些事务按某种次序串行执行的结果。

一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。例如现有事务 T1 和 T2,若 T1与 T2 的并发执行结果与先T1后 T2 相同,或者与先 T2 后 T1 相同那么这个调度就是正确的,否则就是错误的。

冲突可串行化调度

冲突操作:指不同的事务对用一个数据的读写操作(读和写)和写写操作(写和写)。

不同事务的冲突操作和同一事物的两个操作是不能交换的,如果发生交换,自然会发生错误。基于此,如果调度能保证冲突操作的次序不变,就称为冲突可串行化的调度。冲突可串行化调度一定是可串行化调度。


结语

今天对并发控制的介绍就到这里。如果对您有帮助,希望您可以为我留下点赞和关注。谢谢您,这对我真的很重要!

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

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

相关文章

TreeMap、HashMap 和 LinkedHashMap 的区别

TreeMap、HashMap 和 LinkedHashMap 的区别 1、HashMap2、LinkedHashMap3、TreeMap4、总结 💖The Begin💖点点关注,收藏不迷路💖 在 Java 中,TreeMap、HashMap 和 LinkedHashMap 是三种常用的集合类,它们在…

vue判断元素滚动到底部后加载更多

背景&#xff1a;需要判断在元素滚动到底部后自动加载更多操作。 div&#xff1a; div class"medium-msg-main" id"mediumScroll"><div v-for"(item,i) in focusNewsList" :key"i" class"medium-msg-box left-bg mb-5&qu…

Linux httpd服务详解

1. 引言 在现代Web开发和服务器管理中&#xff0c;httpd&#xff08;Apache HTTP Server&#xff09;是最流行的Web服务器软件之一。作为开源项目&#xff0c;Apache HTTP Server为用户提供了稳定、灵活和高度可配置的Web服务解决方案。本文将详细介绍httpd服务的各个方面&…

SQL 别名

SQL 别名 在SQL(Structured Query Language)中,别名是一种常用的技术,用于给表或列指定一个临时的名称,以便在查询中使用。这种技术可以提高查询的可读性,使查询更加清晰和易于理解。本文将详细介绍SQL别名的概念、用途、语法以及在不同场景下的应用示例。 1. 什么是SQ…

APP渗透-android12夜神模拟器+Burpsuite实现

一、夜神模拟器下载地址&#xff1a;https://www.yeshen.com/ 二、使用openssl转换证书格式 1、首先导出bp证书 2、将cacert.der证书在kali中转换 使用openssl生成pem格式证书,并授予最高权限 openssl x509 -inform der -in cacert.der -out cacert.pem chmod 777 cacert…

IT高手修炼手册(2)cmd命令

一、前言 CMD&#xff08;命令提示符&#xff09;是Windows操作系统中的一个重要工具&#xff0c;用于执行命令行操作&#xff0c;旨在提高用户在CMD中的操作效率和便利性。 二、常用cmd命令及其简要说明 1. 快捷键F1&#xff1a;按F1一次&#xff0c;命令提示符向后切换到已经…

进程间通讯与同步技术第一篇,共享内存

进程间通讯与同步技术第一篇&#xff0c;共享内存 共享内存C的shared_memory_object类创建共享内存段映射共享内存段 Linux API信号量同步 共享内存 共享内存是最快的进程间通信机制。操作系统将一个内存段映射到多个进程的地址空间中&#xff0c;这样多个进程就可以在该内存…

利用redis set 实现点赞案例 zset 对点赞进行排序

基于数据库 表 CREATE TABLE IF NOT EXISTS liked_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键id,user_id bigint NOT NULL COMMENT 用户id,biz_id bigint NOT NULL COMMENT 点赞的业务id,biz_type VARCHAR(16) NOT NULL COMMENT 点赞的业务类型,create_time da…

海外金融机构银行保险证券数字化转型营销销售数字化成功案例讲师培训师讲授开户销售营销客户AI人工智能创新思维

金融机构需要数字营销的主要原因 数字银行、直接存款和移动网络的兴起让客户无需前往当地分行即可轻松办理银行业务。这些举措不仅提升了用户体验&#xff0c;也迫使银行向数字化世界迈进。 金融服务公司需要在数字营销渠道上保持稳固的地位&#xff0c;以免落后于大型机构。…

Stream的获取、中间方法、终结方法

1、获取Stream流 单列集合&#xff1a;foreach完整版 双列集合通过Ketset()、entryset() 数组的&#xff1a;通过Arrays Stream流的中间方法&#xff1a;链式编程&#xff0c;原stream流只能使用一次 filter&#xff1a; limit、skip&#xff1a; distinct(有自定义对象需要重写…

群体优化算法---猫群算法介绍,物流配送路径规划(包含3-opt,贪心算法)

介绍 猫群算法&#xff08;Cat Swarm Optimization&#xff0c;CSO&#xff09;是一种新型的基于群体智能的优化算法&#xff0c;由Chu et al.在2006年提出。该算法通过模拟猫的行为&#xff0c;尤其是其两种主要的行为&#xff1a;追捕行为&#xff08;seeking mode&#xff…

LangChain(三)基础问答大模型,从LLMchain开始了解chain!纯新手向

背景 经过前面两篇内容的部分&#xff0c;我想大家应该对Langchain有了一个初步的了解。那么我们接下来完善我们的基础大模型吧&#xff01;开始chain的尝试&#xff01; Chain的说明 chain可谓是Langchain的精髓所在&#xff0c;不使用chain&#xff0c;也就没必要学习Lang…

AWS云服务器的竞争优势

亚马逊网络服务&#xff08;AWS&#xff09;作为全球最大的云计算平台&#xff0c;在激烈的市场竞争中一直保持领先地位。相较于其他云服务提供商&#xff0c;AWS云服务器具有多方面的显著优势&#xff0c;使其成为众多企业和开发者的首选&#xff0c;我们结合九河云的分析一起…

机器学习 - one-hot编码技术

One-hot编码是一种数据处理技术&#xff0c;主要用于将分类变量转换为适合机器学习算法处理的格式。在One-hot编码中&#xff0c;每个类别值都会被转换成一个二进制向量&#xff0c;其中只有一个元素是1&#xff0c;其余所有元素都是0。这种编码方式确保了类别之间的独立性和唯…

如何在前端网页实现live2d的动态效果

React如何在前端网页实现live2d的动态效果 业务需求&#xff1a; 因为公司需要做机器人相关的业务&#xff0c;主要是聊天形式的内容&#xff0c;所以需要一个虚拟的卡通形象。而且为了更直观的展示用户和机器人对话的状态&#xff0c;该live2d动画的嘴型需要根据播放的内容来…

WEBHTTP

目录 理解HTTP协议请求流程 1 1 Web基础 2 Hosts文件 1 1 2网页与HTML 2 HTML概述 1 1 3静态网页与动态网页 1.2HTTP协议 1 2 1 HTTP协议概述 1 2 2 HTTP方法 HTTP支持几种不同的请求命令&#xff0c;这些命令被称为HTTP方法(HTTP method 表1一3 HTTP方法 表1&#…

开源协作wiki和文档软件Docmost

什么是 Docmost &#xff1f; Docmost 是一款开源协作 wiki 和文档软件。它是 Confluence 和 Notion 等软件的开源替代品。使用 Docmost 可以无缝创建、协作和共享知识。非常适合管理您的 wiki、知识库、文档等。目前 Docmost 处于测试阶段。 软件的主要特点 安装 在群晖上以 …

Python面试题:请解释 Python 的垃圾回收机制

Python 的垃圾回收机制主要通过引用计数&#xff08;Reference Counting&#xff09;和循环垃圾收集&#xff08;Cycle Garbage Collection&#xff09;来管理内存。以下是对这两种机制及其相关知识点的详细解析&#xff1a; 引用计数 原理 每个对象都有一个引用计数器&…

Linux运维:MySQL备份,物理冷备份,热备,完备+二进制日志

备份类型 完全备份、增量备份、差异备份 完全备份&#xff1a;整个数据集都备份 增量备份&#xff1a;仅备份最近一次完全备份或增量备份&#xff08;如果存在增量&#xff09;以来变化的数据&#xff0c;备份较快&#xff0c;还原复杂。 差异备份&#xff1a;对比前一次备…

Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置ADC 2.1 ADC硬件接口 2.2 FSP配置ADC 3 软件功能实现 3.1 FSP生成项目 3.2 FSP ADC模块库函数介绍 3.2.1 库函数列表 3.2.2 函数介绍 4 ADC功能代码 4.1 编写代码 4.2 代码…