在 READ COMMITTED 隔离级别中何时/什么锁被持有/释放

2024-03-13

我正在尝试了解 SQL Server 中的隔离/锁。

我在 READ COMMITTED 隔离级别(默认)中有以下场景

我们有一张桌子。

create table Transactions(Tid int,amt int)

with some records

insert into Transactions values(1, 100)
insert into Transactions values(2, -50)
insert into Transactions values(3, 100)
insert into Transactions values(4, -100)
insert into Transactions values(5, 200)

现在从msdn我明白了

当选择被触发时共享锁被采取,所以没有其他事务可以修改数据(避免脏读)。文档还讨论了行级、页级、表级锁。我想到了以下场景

Begin Transaction

select * from Transactions

/*
some buisness logic which takes 5 minutes

*/

Commit

我想了解的是共享锁将被获取的持续时间以及哪个(行、页、表)。

仅当语句时才会获取锁select * from Transactions是运行还是获取整个 5 分钟以上直到我们到达 COMMIT。


你问错了问题,你担心的是执行细节。您应该考虑和关心的是隔离级别的语义。 Kendra Little 有一张很好的海报来解释它们:免费海报! SQL Server 隔离级别指南 http://www.littlekendra.com/2011/02/08/isoposter/.

你的问题应该改写如下:

从项目中选择 *

问:我会看到哪些项目?
A:所有承诺的项目

问:如果有未提交的事务已插入/删除/更新项目,会发生什么情况?
答:您的 SELECT 将阻塞,直到所有未提交的项目都被提交(或回滚)。

问:如果插入/删除/更新新项目会发生什么while我运行上面的查询?
答:结果尚未确定。您可能会看到一些修改,而不会看到其他一些修改,并且可能会被阻止,直到其中一些修改提交为止。

一旦您的语句完成,READ COMMITTED 就不会做出任何承诺,无论事务的长度如何。如果您再次运行该语句,您将再次拥有与之前状态完全相同的语义,并且您之前看到的项目可能会更改、消失,并且可能会出现新的项目。显然这意味着改变can选择后将被制作到项目中。

更高的隔离级别提供更强的保证:可重复读取保证在提交之前您第一次选择的任何项目都不能被修改或删除。 SERIALIZABLE 添加了保证,即在提交之前,第二个选择中不会出现新项目。

这是你需要了解的,而不是实现机制如何运作。掌握了这些概念后,你可能会问实现细节。它们都在中描述事务处理:概念和技术 https://rads.stackoverflow.com/amzn/click/com/1558601902.

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

在 READ COMMITTED 隔离级别中何时/什么锁被持有/释放 的相关文章

随机推荐

  • 我在哪里可以了解“shell:”URI?

    我刚刚意识到有一个shell URI 但每个搜索引擎似乎都认为shell and shell是同一件事 我唯一发现的是你可以输入shell startup直接在资源管理器中 XP 和 7 测试过 可以看到明显的效果 这已经很好了 因为没有
  • 强制 JTable 在仍处于编辑模式时将数据“提交”到模型

    我有一个 JTable 如下 因此 当 JTable 仍处于编辑模式时 在 Dividend 列处有键盘光标闪烁 直接单击 确定 不会将数据提交到表模型中 单击 确定 仅关闭对话框 我需要明确按 ENTER 键 以便将数据提交到表模型中 当
  • SNMP:创建自定义 OID

    我需要自定义 OID 来监控我的一些软件状态 但我就是不明白 如何在Windows XP系统中创建自定义OID 如 1 3 6 1 4 1 30891 100 103 我需要其中一些人在那里写一些信息并在需要时阅读它 但我不知道如何在系统中
  • Java/LWJGL:OpenGL 中的 Z 轴表现得像左手坐标系

    最近 我寻求帮助 https stackoverflow com q 18836484 1530508关于 OpenGL 中的 3D 相机旋转 这个答案 https stackoverflow com a 18836618 1530508接
  • PyTorch:如何使用 DataLoaders 自定义数据集

    如何利用torch utils data Dataset and torch utils data DataLoader根据您自己的数据 不仅仅是torchvision datasets 有没有办法使用内置的DataLoaders他们使用的
  • 我可以使用 *.tlb 文件而不使用 Regasm 在计算机上注册它吗

    我们正在支持老化的 VB6 系统 我们已在 Net 中为其编写了新代码 将代码放入程序集中 然后导出 tlb 文件以与 VB6 代码库一起使用 我的问题是 在我希望运行代码的每台计算机上 我是否必须使用 Regasm 来注册类型库 我之所以
  • WCF 最大消息大小配额

    我正在尝试调用 WCF 服务 托管在 Windows 服务中 而不是 IIS 但收到以下错误 最大消息大小配额 传入消息已超出 对于远程通道 请参阅 服务器日志以获取更多详细信息 我尝试将 MaxReceivedMessageSize 和
  • 有序 logit R polr 的聚类标准误差 - 估计中删除的值

    我对 R 很陌生 并且习惯了非常基本的应用程序 现在我遇到了一个问题需要帮助 我正在寻找一种方法聚类标准误 for an 有序逻辑回归 my estimation is similar to this https stats idre uc
  • app.component.css 中的 CSS 样式未应用于选项卡正文内容

    你能告诉我为什么这里没有应用填充 即使我在 app component css 文件中将 padding top 设置为 20px 如果我在 styles css 文件中设置它 它将起作用 不知道为什么当我将 css 属性移动到 app c
  • 使用 Ramda 镜头更改对象中的值属性

    我想知道如何使用 Ramda 镜头更改对象属性 目前 我有一个深层状态 buckets blocks messages replies id 0 text text 0 value simple value 0 id 1 text text
  • 在 Spring 中获取 FileNotFoundException

    我想使用 BeanFactory 创建 bean 但出现异常 java io FileNotFoundException WEB INF businesscaliber servlet xml Resource res new FileSy
  • 将 Java 2d 图形图像保存为 .png 文件

    我正在绘制模拟生成的信息的图形表示 我显示了图表 但我遇到的问题是如何将其保存为 png 当它保存 png 时 文件是全黑的 所以它不是保存我的图形 而是创建一些空白 png 文件 问题是我很难弄清楚如何转换为 BufferedImage
  • TypeScript 中的 function 和 => 有什么区别? [复制]

    这个问题在这里已经有答案了 目前 我正在学习 TypeScript 我对关键字函数和 gt 粗箭头 之间的区别感到非常困惑 请看下面的代码 interface Counter start number interval number res
  • Qt BLE For Android:特性更新不会触发characteristicChanged信号

    这是我们拥有的设备传输自定义服务的自定义特征的定期更新的东西 该设备中的服务和特征是通过 XML 文件定义的 当然 这是指蓝牙BLE协议 我想做的是创建一个简单的 Qt Android 应用程序 连接到设备并监控更新 我已经发现了该服务并将
  • C++ Windows 线程池(非升压/c++11)

    有没有办法仅使用 C 或 Windows C 函数创建线程池 我无法访问 boost 或任何库 我可以访问代码项目 但找不到任何非 UNIX 的内容 并且我发现很难找到实现线程池的方法 我使用的是 VS2010 它还不支持 C 11 线程
  • Android JUnit 测试因 java.lang.VerifyError 失败

    Aloha 我一直遵循这里的指导方针 http developer android com resources tutorials testing helloandroid test html http developer android
  • 替换从 javascript 获取的字符

    我正在制作一个程序 从 flickr 集中提取所有图片 我在代码中发现每个图片链接都有一个大字符串 问题是这样的 链接具有以下格式 https c2 staticflickr com 4 3925 14562233192 3fe2b8fe1
  • 在具有多个参数的 pandas 数据帧上应用滚动函数

    我正在尝试在 pandas 数据帧上应用具有 3 年窗口的滚动函数 import pandas as pd Dummy data df pd DataFrame Product A A A A B B B B Year 2015 2016
  • NodeJs 程序完成后不退出

    抱歉这个菜鸟问题 我是 Javascript 初学者 我正在使用 NodeJs MySQL 包将我的节点应用程序连接到我的数据库 但是成功运行查询后 程序不会退出 它会永远留在那里 直到我手动终止它 我希望程序运行查询并退出程序 我正在使用
  • 在 READ COMMITTED 隔离级别中何时/什么锁被持有/释放

    我正在尝试了解 SQL Server 中的隔离 锁 我在 READ COMMITTED 隔离级别 默认 中有以下场景 我们有一张桌子 create table Transactions Tid int amt int with some r