【数据库CS751:事务处理Transaction Processing(2)】——严格二相锁、事务隔离级别以及现象

2023-10-30

一、严格二相锁(S2PL)

二阶段锁(两相锁):事务在第一阶段依次获得锁,第二阶段保持锁,第三阶段依次释放锁

严格二相锁:事务在第一阶段依次获得锁,第二阶段保持锁,第三阶段同时释放所有锁。

注意两段协议是为了保证事务的可串行性,保证串行事务的正确性。

两相锁的图描述:

严格两相锁的图描述:

这样,严格两相锁是没有级联中止的。

二、 事务隔离级别以及现象

不同的事务的隔离级别会产生不同的错误现象,这一篇主要说三种错误:幻读Phantom,模糊读Fuzzy read,脏读Dirty read。

定义是:

脏读:读取x的未提交值。

模糊读:读到x的不同的已提交值。

幻读:读取一个新的已提交的插入行。

注意模糊读和幻读的区别,模糊读的数据总数没有变化,比如原来是20条数据,现在还是20条数据,但是读的值却不一样。幻读的数据总数发生了变化,原来20条数据,现在21条。

我们举一些例子:

1.模糊读(丢失更新)

s: r 1 [x], r 2 [x], r 1 [x], r 2 [x], w 1 [x], c 1 , w 2 [x], c 2
TA1: r 1 [x],         r 1 [x],        w 1 [x], c 1
TA2:          r 2 [x],        r 2 [x],                w 2 [x] , c 2
TA1 TA2
读x,假设x=10
读x,x=10
读x,x=10
读x,x=10
写x,x值改变 x=x+1=11
提交
写x,x值改变,x= x+10=20,出错XXX
提交

我们发现,TA1本来已经改变x的值并提交,此时x=11,再加10,本来等于21,但是TA2加完之后却等于20,这就是模糊读,这种错误丢失了更新,原因是,别的事物更新值之后,TA2并没有再次读取x,如果TA1提交后,TA2再读一下x,这种错误就能避免。

2.脏读

r 1 [x], r 2 [x], w 2 [x], r 1 [x], w 2 [y], c 1
TA1 TA2
读x
读x
写x

读x,出现脏读风险,

因为TA2修改的

x值并未提交,

一旦TA2回滚,

TA1读的这个x

就是脏读

写y
提交

3.幻读:

TA1 执行: SELECT*FROM mytabl

获得一个结果1
TA2 : 插入一行r并提交.
TA1 再次执行 SELECT*FROM mytabl

获得不同的结果2=结果1+{r}
结果1和结果2出现不同的行数,出现幻觉

这就是幻读。

为了避免这三个问题,数据库事务管理设置了四个不同的安全级别来保证不同的情况下都能相对安全的运行数据库。

 

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

【数据库CS751:事务处理Transaction Processing(2)】——严格二相锁、事务隔离级别以及现象 的相关文章

  • 使用 Spring Boot 的 Flyway Core 给出错误 'delayedFlywayInitializer' 和 'entityManagerFactory' 之间的循环依赖关系

    我想在 SQL Server 数据库上导入一些数据 我使用的是 Spring Boot 2 3 4 我还使用 Hibernate 来生成表 我在pom中添加了flyway核心
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • 如何在可能为空值的字段上创建唯一索引(Oracle 11g)?

    这是包含 3 列的示例表 ID UNIQUE VALUE UNIQUE GROUP ID 我希望可以允许以下记录 1 NULL NULL 2 NULL NULL or 3 NULL 7 4 123 7 or 注意 此条件不允许unique
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • PHP 数据库显示在具有不同锚标记的相同字段中

    我四处寻找 看看这是否可行 但却空手而归 首先 这是我的代码 div style display none div ul li li li li li li ul
  • 术语 SSTable 和 LSM Tree 之间有什么区别

    这两个术语可以互换使用吗 我读过有关 SSTable 工作原理的文章 通常文章都会开始提到 LSM Tree 然而 它们似乎是同一件事 我什么时候应该使用一个术语而不是另一个术语 对于凡人来说 SSTables 和 LSM Trees 的最
  • PostgreSQL 如何创建数据库或模式的副本?

    有没有一种简单的方法可以在 PostgreSQL 8 1 中创建数据库或模式的副本 我正在测试一些软件 它对数据库中的特定模式进行大量更新 我想复制它 以便我可以与原始版本进行一些比较 如果它位于同一服务器上 则只需使用带有 TEMPLAT
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 通过 SQLAlchemy 获取随机行

    如何使用 SQLAlchemy 从表中选择一个或多个随机行 这在很大程度上是一个特定于数据库的问题 我知道 PostgreSQL SQLite MySQL 和 Oracle 具有通过随机函数排序的能力 因此您可以在 SQLAlchemy 中
  • django AuditTrail 与还原

    我正在开发一个新的网络应用程序 我需要将数据库中的任何更改存储到审核表中 此类审计表的目的是 稍后在真正的物理审计中 我们可以确定在某种情况下发生了什么 谁编辑了什么以及数据库当时的状态是什么 复杂的计算 所以大多数审计表将被写入而不是读取
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 数据聚合和缓存:如何按时间间隔快速绘制大型时间序列数据集的图表

    我有一个巨大的时间序列数据集 我想绘制图表 时间序列可以追溯到 5 年前 从后端的角度来看 以各种分辨率 间隔 显示这些数据的常用方法是什么 本质上我想绘制这样的数据图表 https bitcoinwisdom com markets bi
  • 什么是“数据库实体”以及哪些类型的 DBMS 项目被视为实体? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • oursql 中的参数化查询

    如果有人能告诉我是否可以使用命名占位符进行参数化查询 我将不胜感激oursql 一个用于与 MySQL 数据库交互的 python 模块 例如 我尝试了一种可以与 sqlite3 一起使用的查询 c execute select from
  • SSDT SQL Server 数据库项目中用于架构比较的命令行/API?

    在 Visual Studio 2012 中 我们有Schema Compare http msdn microsoft com en us library hh272690 28v vs 103 29 aspx in SSDT http
  • 表与多个表具有一对一的关系

    1 一个表可以和多个表建立一对一的关系吗 为了更清楚地说明 如果我想做插入 第一个表将受到影响并且 只有一张其他表会受到影响 2 如果是这样 主键将如何 3 另外 如果我想检索多条记录 查询会是什么样子 从这些表中 谢谢 一个表可以和多个表
  • ALTER TABLE 语句与 FOREIGN KEY 约束冲突

    为什么要添加外键tblDomare表导致此错误 ALTER TABLE 语句与 FOREIGN KEY 约束 FK tblDomare PersN 5F7E2DAC 冲突 冲突发生在数据库 almu0004 表 dbo tblBana 列

随机推荐

  • 流程型和离散型制造行业mes系统的区别

    流程型和离散型制造行业mes系统的区别 在制造信息化的时代背景之下 MES系统 被越来越多的企业重视 虽然MES系统在制造行业中有着巨大的价值 但是不同的企业对MES系统的需求也存在很大的差异性 比较突出的就是流程型和离散型这两个方面 那么
  • 修改linux命令行终端的显示区行数列数

    stty rows 50 columns 200
  • Bugkuctf web 前女友

    老规矩 有新东西就记上一记 题目链接 这个有点儿意思 打开源码 好了 代码意思比较简单 重点看圈住的代码就好 满足v1v2的值不等但是md5相等 且v3 flag才行 好了 新知识来了 首先是md5 函数漏洞 第一种 GET a GET b
  • Web自动化Selenium-获取页面元素的相关信息

    获取页面元素的信息主要有两个目的 一是执行完步骤后进行断言 二是获取前一步骤的响应结果 将其作为后续步骤的输入或判断条件 获取元素的基本信息 目的输出元素的大小 文本 标签名 关键字 tag name 输出元素的标签名 size 输出元素的
  • TCP/IP协议,HTTP协议--面试必备

    经常面试被问到什么是http协议 什么是TCP协议 而且每次都弄不清楚 是时候记录一下了 一 什么是http协议 如果读者对计算机网络的体系结构比较了解的话应该清楚 IP协议位于网络层 TCP UDP协议位于传输层 HTTP位于应用层 如下
  • 本地存储基础

    本地存储特性 1 数据存储在用户浏览器中 2 设置 读取方便 甚至页面刷新不丢失数据 3 容量较大 sessionStorage约5M localStorage约20M 4 只能存储字符串 可以将对象JSON stringify 编码后存储
  • 如何使用Navicat修改mysql用户密码?

    https jingyan baidu com article 455a995054d490a167277858 html 下面介绍如何使用Navicat修改mysql用户密码的具体操作方法 工具 原料 Navicat Premium 方法
  • calico网络策略

    关于优先级order 为了与 Kubernetes 兼容 Calico 网络策略执行遵循 Kubernetes pod 的标准约定 如果没有网络策略适用于 Pod 则允许所有进出该 Pod 的流量 如果一个或多个网络策略应用于类型为 ing
  • TypeError: write() argument must be str, not bytes解决方法

    使用 HTMLTestRunner 输出测试报告 报错 TypeError write argument must be str not bytes 如下 原因 实例化HTMLTestRunner的runner runner HTMLTes
  • tmux插件管理器

    参考 tmux插件管理器tpm Tmux Plugin Manager 安装要求 tmux version 1 9以上 git bash 下载插件管理器 git clone https github com tmux plugins tpm
  • 2023Web自动化测试的技术框架和工具有哪些?

    Web 自动化测试是一种自动化测试方式 旨在模拟人工操作对 Web 应用程序进行测试 这种测试方式可以提高测试效率和测试精度 减少人工测试的工作量和测试成本 在 Web 自动化测试中 技术框架和工具起着至关重要的作用 本文将介绍几种常见的
  • linux实现复制文件的两种方法

    分享在linux系统下拷贝文件的两种方法 方法1 使用系统调用的read和write实现文件拷贝 include
  • 读书笔记: DetNet: Design Backbone for Object Detection

    读书笔记 DetNet Design Backbone for Object Detection 之前咱们不是读了adaptive convolution嘛 赶紧学以致用告诉我们为什么要用AC Abstract 背景 CNN已经被广泛应用于
  • android socket java_Android中Socket通信的实现方法概述

    本文实例简述了Android中Socket通信的实现方法 具体内容如下 一 socket通信概述 通俗的来说套接字 socket 是通信的基石 是支持TCP IP协议的网络通信的基本操作单元 它是网络通信过程中端点的抽象表示 包含进行网络通
  • 程序设计模式(二)创建型模式

    一 一个MAZE的构造过程 Maze的UML diagram如图所示 可以发现MapSite是斜体表示抽象类 有Room Door Wall三个子类继承 这三个就是用继承封装了MapSite的多向性 然而一个Maze 就是Room的聚合 所
  • JVM垃圾收集器-对比Serial、Parallel、CMS和G1

    4个Java垃圾收集器 错误的选择会对性能影响很大 现在很多开发者仍然搞不清垃圾收集器 这一块在Java 8版本的改动也比较大 特别是去掉了PermGen永久代和带来一些新的让人激动的优化 提到垃圾收集 大多数人在每天的编程工作中都会用到并
  • 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。(题目类型:没有明确循环次数)

    import java util Scanner 从键盘读入个数不确定的整数 并判断读入的正数和负数的个数 输入 为0时结束程序 public class ForWhileTest public static void main Strin
  • 安卓手机免root本地运行青龙面板(ZeroTermux)

    安卓手机免root本地运行青龙面板 网盘下载 https www 123pan com s EZ6KVv J41Gd html提取码 4444 ZeroTermux https od ixcmstudio cn repository mai
  • Android进阶知识树——Android四大组件启动过程

    Android的四大钻无论对开发者或是用户都意义重大 对于用户来说应用就是Activity 用户所能看到的和交互的都发生在Activity中 对于开发者来说四大组件更是开发功能个展示功能的基础和媒介 对于初级开发者每天的工作都在和四大组件打
  • 【数据库CS751:事务处理Transaction Processing(2)】——严格二相锁、事务隔离级别以及现象

    一 严格二相锁 S2PL 二阶段锁 两相锁 事务在第一阶段依次获得锁 第二阶段保持锁 第三阶段依次释放锁 严格二相锁 事务在第一阶段依次获得锁 第二阶段保持锁 第三阶段同时释放所有锁 注意两段协议是为了保证事务的可串行性 保证串行事务的正确