乐观锁绝对安全吗?

2024-03-25

当使用乐观锁定策略时,可以解决如下并发问题:



| the first transaction started        |
|                                      |  
| select a row                         |
|                                      |  the second transaction started
| update the row with version checking |
|                                      |  select the same row 
| commit txn                           |
|                                      |  update the row with version checking
|                                      |  
|                                      |  rolls back because version is dirty
  

但是,如果在极少数情况下,如果第二个事务中的更新是在第一个事务中的更新之后但在事务提交之前怎么办?



| the first transaction started        |
|                                      |  the second transaction started
| select a row                         |
|                                      |  select the same row 
| update the row with version checking |
|                                      |  update the row with version checking
| commit txn                           |
|                                      |  rolls back because version is dirty // will it?
|                                      |  
|                                      |  
  

我做了一个实验,第二个事务中的更新无法读取“脏”版本,因为第一个事务尚未提交。这种情况下第二笔交易会失败吗?


您在问题中没有说明您实际使用的数据库系统,所以我不知道您系统的详细信息。

但无论如何,在乐观锁定系统下,进程在执行更新语句时不能只检查行版本,因为正是您担心的问题。

对于完全可序列化、隔离的事务,每个进程必须在提交时自动检查其检查和修改的所有行的行版本。因此,在第二种情况下,右侧进程在尝试提交之前不会检测到冲突(您没有为右侧进程包含此步骤)。当它尝试提交时,它会检测到冲突并回滚。

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

乐观锁绝对安全吗? 的相关文章

  • 程序退出时如何删除文件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法注册一个文件 以便在Python退出时将其删除 无论它如何退出 我正在使用长期存在的临时文件 并希望确保它们被清理 该文件必
  • 启动屏幕故事板迁移问题

    我有一个用 Objective C 构建的应用程序 它使用启动屏幕图像集作为启动画面 根据最近苹果公司的新指南 适用于 iPhone 或 iPad 的应用程序必须使用 iOS 13 SDK 或更高版本构建 并且 使用 Xcode 故事板提供
  • 如何检查同一个java程序的两个实例是否正在运行?

    您好 我正在制作一个将通过 javaw exe 运行的程序 因此它不直接可见 现在我的问题是有时 意外地 用户可能会运行同一应用程序的多个实例 例如输入javaw myProgram两次 在这种情况下 如果程序已经在运行 有什么方法可以阻止
  • Bootstrap Popover 一键点击即可工作 - JavaScript

    我有一些引导按钮 单击按钮时应该显示一个弹出窗口 usernameL onclick function e e currentTarget id popover html true 当网站加载并且我第一次单击按钮时 没有任何反应 如果我第二

随机推荐

  • AlamoFire 在后台会话中下载

    我在新应用程序中使用 Alamofire 基于 Alamofire 的下载管理器示例 我需要一些有关使用后台会话下载文件的说明 我需要重写 SessionDelegate 才能使其正常工作吗 要不就backgroundCompletionH
  • NoClassDefFoundError:android.support.v7.widget.helper.ItemTouchHelper$3

    嗨 我想创建滑动删除RecyclerView结果是崩溃 看着那 这build gradle 我导入了所需的所有库 在代码中我可以使用ItemTouchHelper类但是当我想刷一个项目时它崩溃了 build gradle compile c
  • 在 groupby 之后将组与一个数据帧合并

    我试图回答这个问题 https stackoverflow com questions 47117982 insert missing category for each group in pandas dataframe通过组级合并 下面
  • 为什么只有当可执行文件在 Visual Studio 下运行时 CreateFileA 才会失败?

    我写了一个简单的check file ref函数使用 WinAPI 检查两个路径是否引用同一个文件 代码没问题 它是用 C 语言的 Visual Studio 2017 编译的 标志 TC 奇怪的是CreateFileA当可执行文件在 Vi
  • GPIO-Hog声明的目的和用途

    问题 其目的和用例是什么gpio hog宣言 可以从用户空间连接 占用 的 GPIO 引脚吗 如果 占用 GPIO 引脚无法与用户空间交互 那么是否有任何机制可以在 dts 文件中配置 GPIO 引脚以进行用户空间交互 背景 我正在尝试配置
  • 通过在两个现有列上使用 lambda 函数在 Panda 中创建新列

    我可以通过定义用户函数然后使用 apply 在 Panda 中添加新列 但是 我想使用以下方法来做到这一点lambda 有办法吗 例如 df有两列a and b 我想创建一个新专栏c这等于之间的最长长度a and b df pd DataF
  • Swift 结合添加运算符方法,如何使返回值简单、简短,如 Publishers.FlatMap.XX> 到 AnyPublisher

    当我添加一些运算符时 返回值会更长 例如 Publishers FlatMap 令牌 gt AnyPublisher gt 其实我希望用户只需要知道AnyPublisher足够 有什么办法让我只能返回AnyPublisher而不是Publi
  • Android动态功能模块依赖关系

    所以我有几个共享通用代码的功能 让我们称它们为 feature1 和 feature2 我无法将共享代码添加为 feature1 和 feature2 的依赖项 Android studio 抛出以下错误 多个 APK 打包同一库可能会导致
  • 找不到引用 Microsoft.DirectX.AudioVideoPlayback 和 Microsoft.DirectX

    我已经安装了 net 4 0 以及 XNA 4 0 前段时间我用过Microsoft DirectX播放一些音乐 现在当我尝试重做工作时 我找不到参考 平台上的新变化是否修改或移动了参考文献中的某些内容 视觉工作室 2010 右键单击项目
  • 如何使用preparedstatement获取最后插入行的id? [复制]

    这个问题在这里已经有答案了 我使用以下代码将新行插入数据库 我需要获取最后插入行的 id 但是当我运行代码时 它显示以下消息 SEVERE java sql SQLException Generated keys not requested
  • 加载后隐藏微调器

    我想在加载页面后隐藏微调器 我尝试过这个 document ready function loader hide Hide it initially ajaxStart function this show ajaxStop functio
  • 如何将 IsActiveAsync 失败信息传递给用户和客户端?

    In my IdentityServer4我实施的项目IProfileService The IsActiveAsync使用隐式和混合流时 在人类用户通过登录网页成功进行身份验证后 会多次调用该方法 我注意到它被调用时context Cal
  • 结构归纳终止

    我无法让 Agda 的终止检查器接受使用结构归纳定义的函数 我认为 我创建了以下最简单的示例来展示此问题 以下定义size被拒绝 即使它总是在严格较小的组件上递归 module Tree where open import Data Nat
  • DB 或 XML 问题

    XML 似乎是另一种以更小规模存储信息的方式 而DB可以处理所有类型 我有兴趣了解每种方法的优点和缺点 在某个场景中 其中一个更好吗 我确信每个人都有最好的情况 先感谢您 嗯 XML 是任何人都可以读取的文件 因为它是文本 数据库必须通过
  • MFC 控件上的文本 - Unicode 字符(例如日语)被截断

    背景 我正在开发一个 C MFC 应用程序 我们已经将其转换为显示 unicode 字符以支持外语 在大多数情况下 这是成功的并且 unicode 字符显示正确 但我遇到了一个问题 某些控件上的某些文本被截断 Example 在这里 您可以
  • 使用linqpad作为主要查询工具

    我团队的一名成员最近转而使用 LinqPad 作为他的主要查询工具 有时仍然会使用 SQL Studio 其简单目的是迫使自己使用 LINQ 变得更自然 我认为这是一个非常好的主意 并正在考虑要求我的团队的其他成员进行此转换 有人对采取这种
  • 以编程方式唤醒 OSX 上的显示

    我已经设法让显示器立即进入睡眠状态 pmset displaysleepnow 在终端中 但是为了唤醒显示屏 我只找到了 pmset schedule wake 12 24 2009 00 00 00 如果我尝试将任何事情安排得早于从现在起
  • 在我的 c++ 项目中,在 Windows 上使用 libcurl 和 Visual Studio 不起作用,因为字符串已损坏

    正如标题中所解释的 我尝试使用 libcurl C API 提交简单的 http 查询 我使用 Windows 作为操作系统 C 作为语言 Visual Studio 2008 作为 IDE 我的代码非常简单 我初始化卷曲 CURLcode
  • Linq To SQL 指定的强制转换对于 Union 无效错误

    我有以下代码 它在 NET 4 0 中针对 SQL Server 2008 R2 服务器使用 Linq to SQL public void Patients var documents GetEMRDocumentsByPatientId
  • 乐观锁绝对安全吗?

    当使用乐观锁定策略时 可以解决如下并发问题 the first transaction started select a row the second transaction started update the row with vers