【数据库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)】——严格二相锁、事务隔离级别以及现象 的相关文章

  • 具有重复值的 Sqlite 列

    就说专栏吧aSQLite 数据库的非常重复 始终有相同的 4 个值 其他值可能稍后出现 但不同值的数量将少于 1000 个 VALUES hello world it s a shame to store this str many tim
  • Redis 是否使用用户名进行身份验证?

    我已经在我的环境中设置了Redis 并且只看到了通过密码授权的部分 有没有办法也设置用户名 还是只能通过密码验证 Redis 6 上有 ACL 这些都有一个用户名 查看https redis io topics acl https redi
  • 如何使用 php 命令使注册表单高度安全?

    我想让代码对用户来说真正安全 下面的代码显示了 php 代码 我已将其用于我的网站 现在我已经使用了一些验证 例如密码和重复密码必须匹配 并且用户必须输入所有字段 为了使其更安全 我想插入安全命令 例如 PDO mysqli crypto
  • Access 2007 数据库和应用程序的版本控制

    我需要对 Microsoft Access 2007 数据库和应用程序进行版本控制 目前 所有内容都包含在单个 mdb 文件中 该应用程序包括 Forms VBA code 实际数据库 我假设我需要将数据库与表单 代码分开 我希望能够将表单
  • 如何在MySQL数据库中插入数据?

    我有一个 ASP NET 应用程序和一个 MySQL 数据库 我想编写一个类来插入 删除和显示数据库中的数据 我有到数据库的连接 但无法在数据库中插入数据 我的班级插入方法 public string CreateEntry string
  • 该模型已具有同名的元素 - ASP.NET

    我正在使用 ASP Net Web 应用程序 每当我尝试添加FOREIGN KEY此错误出现在数据工具操作中 SQL71508 该模型已具有同名的元素 dbo FK Sellers Users SQL71508 该模型已经有一个元素 具有相
  • 清理 couchdb 并重新启动

    清理命令是什么CouchDB请 如果我想disable and re start我的CouchDB命令是什么 Thanks CouchDB 可以从以下位置启动 停止 重新启动 etc init d couchdb or etc rc d c
  • 长 IN 子句是代码异味吗?

    简单的问题 想知道长 IN 子句是否有代码味道 我真的不知道如何证明它的合理性 除了我认为的味道之外 我无法解释为什么它有味道 select name code capital population flower bird from us
  • 数据库设计 - 何时拆分表?

    有时创建一个单独的表会产生更多工作 我是否应该将其拆分 例如 在我的项目中 我有一张客户表 每个客户对每种产品都有自己的特殊价格 只有5种产品 未来不会计划更多产品 每个客户也有一周中公司向他交付产品的独特日子 当日期和产品价格是客户表中的
  • 同步2个具有不同模式的数据库

    我们有一个使用通用表设计的标准化 SQL Server 2008 数据库 因此 我们没有为每个实体 例如产品 订单 订单项等 使用单独的表 而是使用通用表 实体 实例 关系 属性等 我们决定建立一个单独的非规范化数据库来快速检索数据 您能否
  • Firestore 每秒向一个集合写入 500 多次以上

    Firestore 的限制为每秒 500 次写入 to 一个集合 其中文档包含顺序值 索引字段 https cloud google com firestore quotas writes and transactions https cl
  • cdb - 大文件(数百 GB)的常量键值存储

    我需要一个类似于 cdb 常量数据库 的工具 它允许我在索引文件中存储大量数据 数百 GB 范围内 CDB 是理想的候选者 但它有 2 GB 的文件大小限制 因此不适合 我正在寻找的功能是支持二进制键和值的持久键值存储 创建后数据库是只读的
  • 用于只读 DB 的 java ORM

    我了解 hibernate 但我想知道是否有一个更轻的 ORM 引擎只读数据库 我的意思是 我不需要一些事务查询或更新一些记录 另一方面 我需要处理一些大的记录列表 List
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何在 PostgreSQL 中将数据库从一台服务器移动到另一台服务器?

    我正在尝试将数据库从旧服务器移动到新服务器 任何帮助 将不胜感激 Just pipe http www postgresql org docs current interactive migration html从旧服务器转储到新服务器 p
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • 数据库分片和 Rails

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N

随机推荐

  • 流程型和离散型制造行业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 二阶段锁 两相锁 事务在第一阶段依次获得锁 第二阶段保持锁 第三阶段依次释放锁 严格二相锁 事务在第一阶段依次获得锁 第二阶段保持锁 第三阶段同时释放所有锁 注意两段协议是为了保证事务的可串行性 保证串行事务的正确