数据库-第十一章 并发控制【期末复习|考研复习】

前言

总结整理不易,希望大家点赞收藏。

给大家整理了一下数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。


数据库系统概论系列文章传送门:
第一章 绪论
第二/三章 关系数据库和标准语言SQL
第四/五章 数据库安全性和完整性
第六/七章 关系数据理论和数据库设计
第八/九章 数据库编程和优化
第十章 数据库恢复技术
第十一章 并发控制


文章目录

  • 前言
  • 第十一章 并发控制
    • 11.1 并发事务概述
    • 11.2 并发控制技术
    • 11.3 并发控制的可串行性
    • 11.4 两段锁协议
    • 11.5 多粒度封锁
    • 11.6 其他并发控制机制
    • 11.7 MVCC(背八股文的时候顺便加上了,我觉得这不会考)
      • 11.7.1 当前读和快照读
      • 11.7.2 隔离级别
      • 11.7.3 redolog和undolog
      • 11.7.4 MVCC实现原理
    • 11.8 数据库管理系统层次结构
    • 11.9 分布式数据库
  • 练手题
    • 12.1
    • 12.2
  • 总结


第十一章 并发控制

11.1 并发事务概述

并发控制机制:当多个用户并发存取数据库时就会产生多个事务同时存取同一数据的情况,可能会存取不正确的数据。为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。
事务是并发控制的基本单位。
并发控制带来的数据不一致性:丢失修改、不可重复读、读“脏”数据
(1)丢失修改:T1,T2同时读(这时读到的数据是一样的),T1对 其操作后,T2对其操作导致T1的操作丢失。
(2)不可重复读:(两个事务先后读取同一条记录,但两次读取的数据不同)①T1读后,T2修改数据,T1再读发现值不同
②T1读后,T2删除
③T1读后,T2插入(后两种有时也叫幻影现象)
(3)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是再插入数据时,又发现这行数据已经存在
(4)读脏数据:(一个事务读到另一个事务还没提交的数据)T1操作后,T2读,T1由于某种原因撤销操作。导致T2读到的数据和数据库内容不一样。

11.2 并发控制技术

并发控制技术:封锁(locking),时间戳(timestamp),乐观控制法(optimistic scheduler),多版本并发控制(MVCC)。(ps:并发控制concurrency control)
(1) 封锁(大重点)
排他锁X锁(exclusive lock),写锁:事务T对对象A上写锁,T可对A进行读写,但其他事务都不能对A上任何类型的锁。直到T释放A为止。
共享锁S锁(share lock),读锁:事务T对对象A上读锁,则T可以读A,但不能写,其他事务只能对A上读锁不能加写锁,直到T释放A上的S锁为止。
(2)三级封锁协议(规定一些规则,避免并发操作出现问题)
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。(在写之前加X锁,防止丢失修改问题)
二级封锁协议:在一级基础上增加事务T在读R之前对其加S锁,读完之后释放S锁。(在读之前加S锁,读完就可以释放。防止丢失修改,脏数据问题)
三级封锁协议:在一级基础上增加事务T在读R之前对其加S锁,直到事务结束后才释放。(在读之前加S锁,事务结束才能释放。防止丢失修改,脏数据,不可重复读的问题)
(3) 活锁和死锁
活锁:某一事务永远处于等待状态。解决方法:先来先服务。
死锁:两个事务相互等待。
死锁预防:
(1)一次封锁法:要求每个事务必须一次对所有要使用的数据全部加锁。
(2)顺序封锁法:预先规定一个不会发生死锁的顺序,然后按照这个顺序严格加锁。
数据库解决死锁问题:诊断并解除死锁。
(1) 超时法
(2)等待图法。
通常采用的方法:选择一个处理代价最小的事务,将其撤销,释放此事务上所有的锁。使得其他事务能够继续运行下去。

11.3 并发控制的可串行性

可串行化调度:多个事务并发执行是正确的,当且仅当其结果与按某一次序结果相同。则称为是可串行化调度。
可串行性是并发事务正确调度的准则。
冲突操作是指不同事务对同一个数据的读写操作和写写操作。
一个操作在保证冲突操作次序不变的情况下,交换两个事务的不冲突操作次序得到另一个调度,如果此调度是串行的。则原调度是冲突可串行化的调度。冲突可串行化是可串行化的充分条件,不是必要条件。

11.4 两段锁协议

两段锁协议:所有事务必须分成两个阶段对数据加锁和解锁。
扩展阶段和收缩阶段:扩展阶段:只允许申请但是不能释放;收缩阶段:只能释放不能申请
是可串行化调度的充分条件,但可能会发生死锁。

11.5 多粒度封锁

显示搜索适应事物的要求直接加到数据对象上的资源。隐式封锁是该数据对象没有被独立加锁,是由其上级节点加锁而使该数据对象加上了锁。
意向锁的含义是如果一个节点加意向锁,则说明该节点的下层节点正在被加锁。
意向锁分为三种,意向共享锁IS锁(后裔加点拟加S锁),意向排他锁IX锁(后裔加点拟加X锁),共享意向排他锁SIX锁(先加S锁,后加IX锁,表示要读整张表并且更新个别元组)。

11.6 其他并发控制机制

时间戳方法给每个事务盖上一个时间戳,每个事务具有唯一的时间戳,并且按照这个时间戳来解决事务的冲突操作。
乐观控制法又被称为验证方法:认为事务中执行时很少发生冲突,让他自由执行,如果检查该事务发生冲突并影响可串行性则拒绝提交并回滚该事务。乐观锁用于读操作多的场景,悲观锁适用于写操作多的场景。
意向锁:如果一个结点加意向锁,则说明该节点的下层结点正在被加锁。
(节点的层次是数据库——>关系——>元组)
三种意向锁:意向共享锁(IS锁Intent share lock),意向排他锁(IX锁),共享意向排他锁(SIX锁)
IS: 事务要对数据对象加S锁,首先要对其上层加IS锁
IX:(上面那条换成X锁)
SIX锁:对一个数据对象加SIX锁,表示对他加S锁,再加IX锁。
意向锁中:任意事务要对一个数据对象加锁,必须先对他的上层结点加意向锁。

11.7 MVCC(背八股文的时候顺便加上了,我觉得这不会考)

MVCC多版本并发控制,指维护一个数据的多个版本使得读写操作没有冲突。快照读为mysql实现mvcc提供了一个非阻塞读功能。MVCC的具体实现依赖于数据库记录的三个隐藏字段、undo log日志、readview

11.7.1 当前读和快照读

当前读:读取的记录是最新版本读取时还要保证其他并发事务不能修改当前进入会对读取的记录进行加锁。
快照读简单的select就是快照读,快照读读取的版本是可见版本,也有可能是历史版本不加锁是非阻塞读。

11.7.2 隔离级别

在这里插入图片描述

不同的隔离级别会对于快照读有不同的处理方法。Read committed每一次select都会生成一个快照读,Repeatable read开启事务后第一个select语句才是快照读的,Serializable快照都会退化为当前读。

11.7.3 redolog和undolog

redo log重做日志记录的是事务提交时数据页的物理修改,有两部分构成重做日志缓冲和重做日志文件。输入每次提交时会将事务刷新到Redo log而不是直接将buffer pool中的数据刷到磁盘ibd文件中。redolog是顺序写,速度快,后台线程伺机采用一定机制再将数据刷新到ibd文件中。
undo log回滚日志用于记录数据被修改前的信息,属于逻辑日志 。

11.7.4 MVCC实现原理

三个隐藏字段:
DB_TRX_ID(最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID )、DB_ROLL_PTR(undolog版本链:回滚指针指向这条记录的上一个版本用于配合Undo log指向上一版本,不同事务或相同事务对同一条记录进行修改会导致该记录的Undo log形成1条记录版本链表 链表的头部是最新的旧记录 链表的尾部是最早的旧记录)、
DB_ROW_ID(隐藏主键如果表结构没有指定主键则生成该隐藏字段)。
由read view 来记录并维护系统当前活跃的未提交的事务的ID。readview中包含着当前活跃事务ID的集合、最小活跃事务ID、预分配事务ID 和readview创建者的事务ID。根据版本链数据访问规则来确定是否可以访问该版本。
在RC隔离级别下,在事务中每执行一次快照读生成readview,在RR隔离级别下在事务中第一次执行快照读时生成read view后续会重复使用。
MVCC靠隐藏字段Undo log版本链read view实现的。原子性由Undo log实现,持久性由Redo log实现一致性由Undo log和redo log实现,隔离性由锁和MVCC实现。

11.8 数据库管理系统层次结构

应用层——语言处理层——数据存取层——数据存储层
语言处理层:对数据库语言SQL进行语法分析、视图转换、完整性、安全性检查等,生成可执行代码(编译……)
数据存取层:处理元组,对元组实现增删改查这种操作
数据存储层:数据页和缓冲区,物理层面的管理

11.9 分布式数据库

分布式数据库是由一组数据组成,这组数据分布在计算机网络的不同计算机上,网络中的每个结点具有独立处理的能力,可以执行局部应用。同时,每个结点也能通过网络通信系统执行全局应用。(高度的自治性和整体性)

练手题

12.1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.2

在这里插入图片描述
上一道题是10,这一道题是5,不同年份的练练手,套路都是一样的。

总结

数据库部分也更新完了,以往的章节有些可能和最初发布的版本不一样,新增加了许多题,大家都做做没什么坏处。
祝大家超常发挥!

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

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

相关文章

数据分析-Pandas数据画箱线图

数据分析-Pandas数据画箱线图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&#xff…

【重新定义matlab强大系列十七】Matlab深入浅出长短期记忆神经网络LSTM

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

音视频学习笔记——c++多线程(二)

✊✊✊🌈大家好!本篇文章是多线程系列第二篇文章😇。首先讲解了利用mutex解决多线程数据共享问题,举例更好理解lock和unlock的使用方法,以及错误操作造成的死锁问题,最后讲解了lock_guard与unique_lock使用…

Django模型层(附带test环境)

Django模型层(附带test环境) 目录 Django模型层(附带test环境)连接数据库Django ORM在models.py中建表允许为空指定默认值数据库迁移命令 开启测试环境建表语句补充(更改默认表名)数据的增加时间数据的时区 多表数据的增加一对多多对多 数据的删除修改数据查询数据查询所有数据…

鸿蒙OpenHarmony HDF 驱动开发

目录 序一、概述二、HDF驱动框架三、驱动程序四、驱动配置坚持就有收获 序 最近忙于适配OpenHarmonyOS LiteOS-M 平台,已经成功实践适配平台GD32F407、STM32F407、STM32G474板卡,LiteOS适配已经算是有实际经验了。 但是,鸿蒙代码学习进度慢下…

【AcWing】蓝桥杯集训每日一题Day1|二分|差分|503.借教室(C++)

503. 借教室 503. 借教室 - AcWing题库难度:简单时/空限制:1s / 128MB总通过数:8052总尝试数:26311来源:NOIP2012提高组算法标签二分差分 题目内容 在大学期间,经常需要租借教室。 大到院系举办活动&…

基于机器学习的网络入侵检测二元分类模型构建与性能评估(NSL-KDD数据集)

简介 该项目是一个基于NSL-KDD数据集的网络入侵检测系统,主要采用机器学习方法对网络流量数据进行使用了多种机器学习模型,如逻辑回归、线性SVM、多项式核SVM、高斯核SVM、决策树、随机森林、朴素贝叶斯和K近邻算法训练二元分类(正常/异常&a…

bug总结(1)--变量取错

a c t i v i t y [ ′ t a g n a m e ′ ] 应为 activity[tag_name]应为 activity[′tagn​ame′]应为couponActivitList[0][‘name’] .隐藏的bug,在测试中竟然测不出来,而且上线了好久。为啥会出现这种低级错误呢?第一是写的时候不够仔细认…

Day26:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

目录 新闻列表 自写模版引用 Smarty模版引用 代码RCE安全测试 思维导图 PHP知识点: 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等 技术:输…

2024 年中国高校大数据挑战赛赛题 C:用户对博物馆评论的情感分析完整思路以及源代码分享

博物馆是公共文化服务体系的重要组成部分。国家文物局发布, 2021 年我国新增备案博物馆 395 家,备案博物馆总数达 6183 家,排 名全球前列;5605 家博物馆实现免费开放,占比达 90%以上;全国 博物馆举办展览 3…

【深度学习笔记】6_5 RNN的pytorch实现

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 6.5 循环神经网络的简洁实现 本节将使用PyTorch来更简洁地实现基于循环神经网络的语言模型。首先,我们读取周杰伦专辑歌词…

Python操作Redis 各种数据类型

本文将深入探讨如何使用Python操作Redis,覆盖从基础数据类型到高级功能的广泛主题。无论是字符串、列表、散列、集合还是有序集合,我们将一一解析,同时提供丰富的代码示例帮助读者更好地理解和应用。除此之外,本文还将介绍Redis的…

【20240309】WORD宏设置批量修改全部表格格式

WORD宏设置批量修改全部表格格式 引言1. 设置表格文字样式2. 设置表格边框样式3. 设置所有表格边框样式为075pt4. 删除行参考 引言 这两周已经彻底变为office工程师了,更准确一点应该是Word工程师,一篇文档动不动就成百上千页,表格图片也是上…

STM32之串口中断接收UART_Start_Receive_IT

网上搜索了好多,都是说主函数增加UART_Receive_IT()函数来着,实际正确的是UART_Start_Receive_IT()函数。 —————————————————— 参考时间:2024年3月9日 Cube版本:STM32CubeMX 6.8.1版本 参考芯片&#xff1a…

Svg Flow Editor 原生svg流程图编辑器(二)

系列文章 Svg Flow Editor 原生svg流程图编辑器(一) 说明 这项目也是我第一次写TS代码哈,现在还被绕在类型中头昏脑胀,更新可能会慢点,大家见谅~ 目前实现的功能:1. 元件的创建、移动、形变;2…

【C语言】字符指针

在指针的类型中我们知道有一种指针类型为字符指针char* 一般使用: int main() { char ch w; char *pc &ch; *pc w; return 0; } 还有一种使用方式,如下: int main() { const char* pstr "hello bit.";//这⾥是把⼀个字…

plantUML使用指南之序列图

文章目录 前言一、序列图1.1 语法规则1.1.1 参与者1.1.2 生命线1.1.3 消息1.1.4 自动编号1.1.5 注释1.1.6 其它1.1.7 例子 1.2 如何画好 参考 前言 在软件开发、系统设计和架构文档编写过程中,图形化建模工具扮演着重要的角色。而 PlantUML 作为一种强大且简洁的开…

【stm32 外部中断】

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断优先级:当有多个中…

LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。 loadbalancer本地负载均衡,在调用微服务接口时候&a…

考研复习C语言初阶(4)+标记和BFS展开的扫雷游戏

目录 1. 一维数组的创建和初始化。 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 冒泡…