【数据库】 第11章 并发控制
第11章 并发控制

事务
事务:(从微观角度,或者从DBMS角度)是数据库管理系统提供的控制数 据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合 在一起作为一个整体进行操作和控制,以便数据库管理系统能够提供一致性 状态转换的保证。
事务一般是由应用程序员提出,因此有开始和结束, 结束前需要提交或撤消。
Begin Transaction
exec sql …
…
exec sql …
exec sql commit work | exec sql rollback work
End Transaction
在嵌入式SQL程序中,任何一条数据库操纵语句(如exec sql select等)都会引发一个新事务的开 始,只要该程序当前没有正在处理的事务。而事务的结束是需要应用程序员通过commit或 rollback确认的。因此Begin Transaction 和End Transaction两行语句是不需要的。
- 事务的宏观性(应用程序员看到的事务): 一个存取或改变数据库内容的程 序的一次执行,或者说一条或多条SQL语句的一次执行被看作一个事务
- 事务的微观性(DBMS看到的事务): 对数据库的一系列基本操作(读、写) 的一个整体性执行。
事务的并发执行:多个事务从宏观上看是并行执行的,但其微观上的 基本操作(读、写)则可以是交叉执行的。
事务的特性 ACID
- 原子性Atomicity : DBMS能够保证事务的一组更新操作是原子不可分的,即 对DB而言,要么全做,要么全不做
- 一致性Consistency: DBMS保证事务的操作状态是正确的(符合一个串性的调度),符合一致性的操 作规则,它是进一步由隔离性来保证的
- 隔离性Isolation: DBMS保证并发执行的多个事务之间互相不受影响。例如两 个事务T1和T2, 即使并发执行,也相当于或者先执行了T1,再执行T2;或者先执行 了T2, 再执行T1。
- 持久性Durability: DBMS保证已提交事务的影响是持久的(影响磁盘),被撤销事务的影 响是可恢复的(不影响磁盘)。
事务的并发可能导致

-
丢失修改
由于并发交替执行的操作,可能导致某一事物的修改被覆盖
-
不能重复读:
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
在一个事务过程中,由于另一个事务修改数据,造成该事务前后读取数据不一致
-
幻读:
幻读指的是事务不是串行 发生时的一种现象,是事务 A读取了事务B已提交的新 增数据。例如第一个事务对 一个表的所有数据进行修 改,同时第二个事务向表中 插入一条新数据。那么操作 第一个事务的用户就发现表 中还有没有修改的数据行, 就像发生了幻觉一样。解决 幻读的方法是增加范围锁 (range lock)或者表锁。
在一个事务过程中,由于另一个事务插入或删除记录,造成该事务前后读取总的记录数不一致
-
脏读:
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
一个事务读取了另一个事务尚未提交的数据
数据库事务隔离级别(脏读、幻读、不可重复读)_qq_41776884的博客-CSDN博客_幻读脏读不可重复读
DBMS对事物的控制

事务的调度
事务调度(schedule):一组事务的基本步(读、写、其他控 制操作如加锁、解锁等)的一种执行顺序称为对这组事务的一个调度。
并发(或并行)调度:多个事务从宏观上看是并行执行的,但其微观上的基本 操作(读、写)则是交叉执行的。
面试必考的:并发和并行有什么区别? - 云+社区 - 腾讯云 (tencent.com)
并发相互抢占资源,并行不相互抢占资源

并发调度的正确性
当且仅当在这个并发调度下所得到的新数据库结果与 分别串行地运行这些事务所得的新数据库完全一致,则说调度是正确的。
可串行性:
如果不管数据库初始状态如何,一个调度对数据 库状态的影响都和某个串行调度相同,则我们说这个调度是可串行化的 (Serializable)或具有可串行性(Serializability)
并行调度的正确性是指内容上结果正确性,而可串行性是指形式上结果正 确性;
可串行性更严格
不可串性化的调度可能产生正确的结果
表达事务的一种模型

冲突可串行性

冲突可串行性: 一个调度,如果通过交换相邻两个无冲突的操作能够 转换到某一个串行的调度,则称此调度为冲突可串行化的调度。

冲突可串行性 是比 可串行性 要严格的概念
满足冲突可串行性,一定满足可串行性;反之不然。



锁

封锁协议之锁的类型
-
排他锁X (exclusivelocks)
只有一个事务能读、写,其他任何事务都不能读、写
-
共享锁S (sharedlocks)
所有事务都可以读,但任何事务都不能写
-
更新锁U (Updatelocks)
初始读,以后可升级为写
-
增量锁I (Incrementallock)
增量更新(例如A=A+x) 区分增量更新和其他类型的更新


隔离


MySQL默认的隔离级别是可重复读
封锁粒度

两段锁协议


两段封锁协议是可以保证冲突可串行性的!
死锁

基于时间戳的并发控制方法
相关文章:
【数据库】 第11章 并发控制
第11章 并发控制 事务 事务:(从微观角度,或者从DBMS角度)是数据库管理系统提供的控制数 据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合 在一起作为一个整体进行操作和控制,以便数据库管理系统能…...
Python3-数字
Python3 数字(Number) Python 数字数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。 Python 支持三种不同的数值类型: 整型(int) - 通常被称为是整型或整数,是正或负整数&#x…...
(四十一)Read Committed隔离级别是如何基于ReadView机制实现的?
今天我们来给大家讲一下,基于之前我们说的ReadView机制是如何实现Read Committed隔离级别的,那么当然了,首先就是要先做一些简单的回顾。所谓的Read Committed隔离级别,我们可以用骚气一点的名字,就是简称为 RC 隔离级…...
React echarts封装
做大屏的时候经常会遇到 echarts 展示,下面展示在 React (^18.2.0) 中对 echarts (^5.4.0) 的简单封装。 文章首发于https://blog.fxss.work/react/echarts封装.html,样例查看 echarts 封装使用 props 说…...
【C语言进阶】了解计算机的程序环境和预处理过程 掌握计算机预处理操作
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C语言进阶 🎯长路漫漫浩浩,万事皆有期待 文章目录1.编译与链接1.1 程…...
(三十六)大白话数据库幻读,本质到底是个什么问题?
上一讲我们给大家讲解了不可重复读这个问题,这个问题简单来说,就是一个事务多次查询一条数据,结果每次读到的值都不一样,这个过程中可能别的事务会修改这条数据的值,而且修改值之后事务都提交了,结果导致人…...
【算法经典题集】递归(持续更新~~~)
😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法经典题集🔊本专栏涉及到的知识点或者题目是算法专栏的补充与应用💪种一棵树最好是十年前其次是现在1.递归1.1 递归实现…...
多区域的OSPF实战配置
多区域的OSPF实战配置 需求 如图配置设备的接口IP地址如图规划OSPF网络的区域要求每个设备的 router-id 都是 x.x.x.x(x是每个路由器的名字)确保不同的PC之间可以互通 拓扑图 配置命令 PC1: 192.168.1.1 255.255.255.0 192.168.1.254PC2:…...
现在转行做程序员的多吗?
曾经有一名程序员说,他在编写程序时,就像一个发明家在做实验;当他把程序编好可以运行时,他就已经是个发明家了。 程序员作为众多转行人员首选的职业,也是被大众熟知了。但我们需要知道的不仅是它作为一个职业的定义&a…...
社招前端常见react面试题(必备)
解释 React 中 render() 的目的。 每个React组件强制要求必须有一个 render()。它返回一个 React 元素,是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素,则必须将它们组合在一个封闭标记内,例如 <form>、<group>、<div&g…...
力扣-变更性别
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:627. 变更性别二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言…...
【项目精选】医院管理住院系统的研究与实现(源码+论文+视频)
点击下载源码 本系统主要分为六大模块,分别是医生管理模块、病人管理模块、病床管理模块、收费管理模块、统计分析模块和系统功能模块 ,医生、病人和医院的管理人员都可以通过此系统寻找出自己所需要的信息。 1.1 背景 医院管理住院系统是当今大部分现代…...
Lenovo Legion Y530-15ICH电脑 Hackintosh 黑苹果efi引导文件
原文来源于黑果魏叔官网,转载需注明出处。硬件型号驱动情况主板Lenovo Legion Y530-15ICH处理器Intel Core™ i7-8750H (Coffee-Lake)已驱动内存16GB RAM DDR4 2667MHz已驱动硬盘2TB HP EX950 PCI-E Gen3 x4 NVMe SSD已驱动显卡Intel UHD Graphics 630Nvidia GTX 10…...
CICD 导航
目录内容链接产研服务产研服务参考文章:【产研】 服务部署配置及使用产研服务问题解决参考文章:【问题解决】产研.Net服务部署 配置 使用代码托管GitlabGitlab参考文章:Gitlab 安装 与 使用代码托管Gitlab问题解决参考文章:【问题…...
xgboost学习-原理
文章目录一、xgboost库与XGB的sklearn APIXGBoost的三大板块二、梯度提升树提升集成算法:重要参数n_estimators三、有放回随机抽样:重要参数subsample四、迭代决策树:重要参数eta总结一、xgboost库与XGB的sklearn API 现在,我们有…...
如何查看CUDA版本
Linux 查看CUDA版本: nvcc --version或 nvcc --VWindows 查看CUDA版本: nvcc --version或进入 CUDA 的安装目录查看: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA使用PyTorch 查看 CUDA 版本 import torch print(torch.__ver…...
三、iperf3代码主要架构分析之main函数主要流程
iperf3是一个非常强大的工具,它是用C语言编写的。同时iperf3也是用C语言实现面向对象编程的典范,他以数据结构函数指针为基础,非常好的用C语言实现面向对象的编程的三大特征:封装,继承,多态。相信通过阅读i…...
【概念辨析】大小端存储
一、情境 在进行内存调试窗口的查看时,是不是会有一种错觉,就是它存的数据与我们预期的都是颠倒的,比如: 这里的a就和我们预期的不是很相同。 二、大小端 大小端是计算机厂家根据自己的习惯制定的关于数据字节序的规则。 1.大端…...
并发编程-学习总结(下)
目录 1、Future 1.1、Callable和Runnable的不同 1.2、Future的主要功能 1.3、常用方法 1.4、Future使用注意事项 1.5、CompletableFuture(旅游平台问题) 1.5.1、需求 1.5.2、解决方案1:串行 1.5.3、解决方案2:线程池 1.5.4、解决方案3…...
arm汇编指令详细整理及实例详解
目录一、简介二、ARM 汇编指令说明2.1 32位数据操作指令2.2 32位存储器数据传送指令2.3 32位转移指令2.4 其它32位指令三、实例讲解3.1 MRS3.2 MSR3.3 PRIMASK3.4 FAULTMASK3.5 BX指令3.6 零寄存器 wzr、xzr3.7 立即寻址指令3.8 寄存器间接寻址指令3.9 寄存器移位寻址指令3.10 …...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

