数据库精选题(五)(事务、并行控制与恢复系统)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀数据库

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

前言

概论 

事务

并发控制

恢复系统

三者联系

练习题

题目一

题目二

题目三

题目四

题目五

题目六

题目七

题目八

 总结 


前言

前一讲我们进入了E-R模型设计以及E-R模型向关系模式转化。

那一讲的难点在于:1、如何确定三元关系(不是出现三个实体加联系就是三元关系);2、如何找到隐藏联系(有一些联系并不会直接说明,而是隐藏在生活常识中)

回顾一下:

E-R模型设计的流程:

1、确定E-R模型的最大整体(不出现在模型中)

2、确定E-R模型的实体集

3、确定E-R模型的联系集

4、确定E-R模型的属性集(实体和联系)

5、确定E-R模型实体/联系的主码

6、转化为关系模式

关系模式转化流程:

1、拿到E-R模型

2、将E-R模型中的实体和联系一一转化为关系模式(关系表)

3、根据合并原则将联系表格和实体表格合并

接下来,我们进入事务两阶段封锁 

概论 

让我们先对事务、并发控制以及恢复系统有一个整体性的认识,然后再进入精选题的讲解。

事务

定义:事务是指一个逻辑上的一组操作,这些操作要么全部执行,要么全部不执行。事务的目的是保证数据库从一个一致性状态转换到另一个一致性状态

特性:

  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务开始前和结束后,数据库的状态必须是一致的。
  • 隔离性(Isolation):一个事务的执行不应被其他事务干扰。
  • 持久性(Durability):事务完成后,对数据库的更改是永久性的,系统崩溃也不会丢失。

并发控制

 定义:并发控制是指在多用户环境下,保证多个事务同时执行时的正确性和一致性。它的主要目的是防止由于多个事务同时访问数据库而导致的数据不一致问题。 

 主要技术: 

  • 两阶段封锁:通过锁机制来控制并发访问。例如,读锁(共享锁)允许多个事务同时读数据,但不允许写;写锁(排他锁)则禁止其他事务读或写数据。
  • 时间戳(Timestamping):给每个事务分配一个时间戳,通过比较时间戳来决定事务的执行顺序。
  • 多版本并发控制(MVCC):维护数据的多个版本,使读操作不阻塞写操作,反之亦然。

恢复系统

 定义:恢复系统是指在系统故障后,恢复数据库到一致性状态的机制。它保证数据库在发生崩溃、系统故障等情况下仍能保持数据的一致性和完整性。 

 主要技术: 

  • 日志(Logging):记录事务的所有操作,在发生故障时,可以通过日志来重做(Redo)或撤销(Undo)操作,恢复数据库。
  • 检查点(Checkpointing):定期将数据库的当前状态保存到稳定存储中,减少恢复时需要处理的日志量。
  • 影子页(Shadow Paging):通过页表来维护数据的多个副本,故障时可以使用影子页表来恢复数据。

三者联系

总的来说,数据库的事务必须保证:1、原子性;2、一致性;3、隔离性;4、持久性

并发控制和恢复系统就是为了保证事务的这四种性质而存在的

详细来看: 

 事务与并发控制:并发控制确保多个事务同时执行时不会互相干扰,从而维持数据库的一致性隔离性

事务与恢复系统:事务的持久性要求一旦事务提交,其结果必须持久保存。恢复系统通过日志和其他技术确保即使在故障情况下也能恢复事务的结果,保证持久性、原子性

并发控制与恢复系统:并发控制机制确保事务执行期间的一致性,而恢复系统确保在系统崩溃后恢复到一致性状态。两者共同确保数据库在多用户环境下和发生故障时的一致性和完整性。 

练习题

题目一

问题描述:

什么是事务?

问题解答:

事务是由一系列操作构成的程序执行单元,这些操作要么都做,要么都不做。事务具有原子性、一致性、隔离性和持久性,是不可分割的工作单元

题目二

问题描述:

请画出事务状态图,各种状态之间有什么联系?

问题解答:

题目三

问题描述:

事务的ACID特性分别是什么?每个特性的用途是什么?

问题解答:

  • 原子性(Atomicity) 事务中包含的所有操作要么全做,要么全不做
  • 一致性(Consistency) 事务的隔离执行必须保证数据库的一致性,即事务完成前后数据库是一致的
  • 隔离性(Isolation) 系统必须保证事务不受其它并发执行事务的影响
  • 持久性(Durability) 一个事务一旦提交之后,它对数据库的影响必须是永久的

题目四

问题描述:

下图所示的调度是冲突可串行化的吗?如果是冲突可串行化的,请给出等价的串行调度序列;如果不是,请说明原因。

问题解答:

冲突可串行化判断:画出优先图,看是否有环。如果有则不可串行化,否则可以通过拓扑排序写出串行序列

 画出优先图如下:

由于T1、T3之间存在环,因此不可串行化 

题目五

问题描述:

什么是两段锁协议?

问题解答:

为了保证可串行性,即实现事务的并发运行又保证事务的隔离性等特性,可以使用两阶段封锁实现并发控制。两阶段封锁协议要求每个事务分成两个阶段:增长阶段、缩减阶段。增长阶段事务只能获得锁不能释放锁;缩减阶段事务只能释放锁不能获得锁

题目六

问题描述:

死锁的发生是坏事还是好事?试说明理由。如何解除死锁状态?

问题解答:

一般来说,死锁状态本身是一件坏事,因为死锁将造成资源的浪费、数据库的死循环(业务中断)、数据不一致风险等;但是加入两阶段封锁协议导致的死锁不一定只是坏事,因为如果发生死锁说明在两阶段封锁协议下,这个事务并不是可串行化的,此时不发生死锁让事务任意并发的运行会导致数据不一致、读取脏数据等错误。从这个角度来说,出现死锁反倒是一种保护。

解除死锁状态包括:1、避免死锁;2、检测死锁;3、处理死锁

避免死锁:一次封锁法;顺序封锁法;抢占与事务回滚

检测死锁:超时法、等待图法

处理死锁:在出现死锁后,选择牺牲代价最小的那个事务作为牺牲者,将该事务执行回滚操作(全部回滚/部分回滚),从而解除死锁(这个处理死锁的方法可能出现饿死现象)

题目七

问题描述:

考虑以下调度,思考:
调度{TA,TB,TC}能够满足时间戳排序协议吗?
调度{TA,TB,TC}能够满足两阶段封锁协议吗?
调度{TA,TB,TC}冲突可串行化吗?

时间

TA(TS=1)

TB(TS=2)

TC(TS=3)

t1

R(X)

 

 

t2

W(X)

 

 

t3

 

R(X)

 

t4

 

W(X)

 

t5

 

 

R(Y)

t6

 

 

W(Y)

t7

R(Y)

 

 

t8

W(Y)

 

 

问题解答:

时间戳:

因此不能用时间戳实现并发控制  

 两阶段封锁协议:

因此不能用两阶段封锁实现并发控制 

 冲突可串行化:

因此可以串行化:Tc——Ta——Tb 

题目八

问题描述:

什么是时间戳排序协议?

问题解答:

每个事务在开始时获得一个唯一的时间戳(时间戳的获得可以是计数器、也可以是系统时钟,这两者有各自的优缺点),根据这个时间戳对事务进行排序,排序的规则如下:

如果是读,则不能读未来事务写过的元组;如果是写,则不能写未来事务读过或写过的元组

经过这样排序的事务一定是可串行化的,并且没有死锁,但是可能存在饥饿,并且不保证可恢复性

 总结 

本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。

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

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

相关文章

游戏AI的创造思路-技术基础-机器学习(2)

本篇存在大量的公式,数学不好的孩子们要开始恶补数学了,尤其是统计学和回归方程类的内容。 小伙伴们量力而行~~~~~ 游戏呢,其实最早就是数学家、元祖程序员编写的数学游戏,一脉相承传承至今,囊括了更多的设计师、美术…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

JAVA系列---HttpServletRequest

Servlet 处理 HTTP 请求的流程 一般情况下&#xff0c;浏览器&#xff08;客户端&#xff09;通过 HTTP 协议来访问服务器的资源&#xff0c;Servlet 主要用来处理 HTTP 请求。核心对象有三个 Servlet&#xff1a;提供service()方法处理请求ServletRequest&#xff1a;请求信…

linux中的调试工具gdb

目录 1.背景知识补充 2.使用 知识补充 1.背景知识补充 1.gcc下编译默认是release方式发布的&#xff0c;无法直接进行调试 如果要以debug方式发布&#xff0c;需要携带-g 可以使用grep查询 因为携带debug信息&#xff0c;其文件体积要大一些 2.使用 1.gdb 可执行程序 …

北邮《计算机网络》网络层笔记

文章目录 单词复习网络层前言路由算法&#xff08;构造路由表的算法&#xff09;静态路由算法自适应算法 拥塞控制QoS 服务质量&#xff08;小小的一节&#xff09;网络互联&#xff08;还是小小的一节&#xff09;Internet 单词复习 estimates boot off-line in advance refl…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(上,非结构化剪枝)

文章目录 0. 前言1. 剪枝prune主要功能分类2. torch.nn.utils.prune中的方法介绍3. PyTorch实例3.1 BasePruningMethod3.2PruningContainer3.3 identity3.4random_unstructured3.5l1_unstructured 4. 总结 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己…

AI办公自动化:免费批量将英语电子书转成有声书

Edge-TTS是由微软推出的文本转语音Python库&#xff0c;通过微软Azure Cognitive Services转化文本为自然语音。可以作为付费文本转语音TTS服务的替代品&#xff0c;Edge-TTS支持40多种语言和300种声音&#xff0c;提供优质的语音输出 。 edge-tts支持英语、汉语、日语、韩语、…

基于Netron库的PyTorch 2.0模型可视化

【图书推荐】《从零开始大模型开发与微调&#xff1a;基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 前面章节带领读者完成了基于PyTorch 2.0的MNIST模型的设计&#xff0c;并基于此完成了MNIST手写体数字的识别。此时可能有读者对我们…

C语言结构体包含结构体

C语言结构体可以包含另一个结构体&#xff1b; 下面通过一个例子看一下&#xff1b; struct Date {int day;int month;int year; };struct Person {char *name;struct Date birthday; }; ...... void CTestView::OnDraw(CDC* pDC) {CTestDoc* pDoc GetDocument();ASSERT_VAL…

C语言 | Leetcode C语言题解之第189题轮转数组

题目&#xff1a; 题解&#xff1a; void swap(int* a, int* b) {int t *a;*a *b, *b t; }void reverse(int* nums, int start, int end) {while (start < end) {swap(&nums[start], &nums[end]);start 1;end - 1;} }void rotate(int* nums, int numsSize, int…

国内邮件推送如何避免拦截?内容优化技巧?

国内邮件推送的平台怎么选择&#xff1f;如何提高邮件推送效果&#xff1f; 邮件营销是企业与客户沟通的重要方式&#xff0c;但在国内邮件推送过程中&#xff0c;邮件被拦截的问题屡见不鲜。为了确保邮件能够顺利送达目标用户&#xff0c;AokSend将探讨一些有效的策略&#x…

【Android】实现图片和视频混合轮播(无限循环、视频自动播放)

目录 前言一、实现效果二、具体实现1. 导入依赖2. 布局3. Banner基础配置4. Banner无限循环机制5. 轮播适配器6. 视频播放处理7. 完整源码 总结 前言 我们日常的需求基本上都是图片的轮播&#xff0c;而在一些特殊需求&#xff0c;例如用于展览的的数据大屏&#xff0c;又想展…

跟着DW学习大语言模型-什么是知识库,如何构建知识库

建立一个高效的知识库对于个人和组织来说非常重要。无论是为了个人学习和成长&#xff0c;还是为了组织的持续创新和发展&#xff0c;一个完善的知识管理系统都是不可或缺的。那么&#xff0c;如何建立一个高效的知识库呢&#xff1f; 在建立知识库之前&#xff0c;首先需要确定…

第3章 小功能大用处-事务与Lua

为了保证多条命令组合的原子性&#xff0c;Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。 首先简单介绍Redis中事务的使用方法以及它的局限性&#xff0c;之后重点介绍Lua语言的基本使用方法&#xff0c;以及如何将Redis和Lua脚本进行集成&#xff0c;最后给出Red…

项目实训-vue(十三)

项目实训-vue&#xff08;十三&#xff09; 文章目录 项目实训-vue&#xff08;十三&#xff09;1.概述2.处理按钮 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.处理按钮 实现了图片的上传之后&#xff0c;还需要设置具体的上传按钮。 这段代码使用 Element UI 的 …

Spring学习02-[Spring容器核心技术IOC学习]

Spring容器核心技术IOC学习 什么是bean?如何配置bean?Component方式bean配合配置类的方式import导入方式 什么是bean? 被Spring管理的对象就是bean,和普通对象的区别就是里面bean对象里面的属性也被注入了。 如何配置bean? Component方式、bean配合配置类的方式、import…

C语言 | Leetcode C语言题解之第190题颠倒二进制位

题目&#xff1a; 题解&#xff1a; const uint32_t M1 0x55555555; // 01010101010101010101010101010101 const uint32_t M2 0x33333333; // 00110011001100110011001100110011 const uint32_t M4 0x0f0f0f0f; // 00001111000011110000111100001111 const uint32_t M8…

【containerd】Containerd高阶命令行工具nerdctl

前言 对于习惯了使用docker cli的用户来说&#xff0c;containerd的命令行工具ctr使用起来不是很顺手&#xff0c;此时别慌&#xff0c;还有另外一个命令行工具项目nerdctl可供我们选择。 nerdctl是一个与docker cli风格兼容的containerd的cli工具。 nerdctl已经作为子项目加入…

秋招突击——6/24——复习{完全背包问题——买书,状态转换机——股票买卖V}——新作{两数相除,LRU缓存实现}

文章目录 引言复习完全背包问题——买书个人实现 状态转换机——股票买卖V个人实现参考实现 新作两数相除个人实现 新作LRU缓存实现个人实现unordered_map相关priority_queue相关 参考实现自己复现 总结 引言 今天知道拼多多挂掉了&#xff0c;难受&#xff0c;那实习就是颗粒无…

汪汪队短视频:成都柏煜文化传媒有限公司

汪汪队短视频&#xff1a;萌宠与冒险的交织乐章 在数字时代的浪潮中&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速占领了人们的闲暇时光。而在这些琳琅满目的短视频中&#xff0c;有一类作品以其独特的魅力吸引了无数观众的目光&#xff0c;那就是以萌宠为…