当前位置: 首页 > 面试题库 >

我应该使用哪些锁定提示(T-SQL)?

燕飞文
2023-03-14
问题内容

我想实现一个原子事务,如下所示:

BEGIN TRAN A

SELECT id
FROM Inventory
WITH (???)
WHERE material_id = 25 AND quantity > 10

/*
Process some things using the inventory record and
eventually write some updates that are dependent on the fact that
that specific inventory record had sufficient quantity (greater than 10).
*/

COMMIT TRAN A

问题在于,还有其他交易正在消耗我们库存中的数量,因此在选择记录和在事务A中写入更新之间,该记录可能成为无效选择,因为该记录的数量可能已降至阈值以下在WHERE子句中。

所以问题是,在我完成更新并提交事务之前,我应该在WITH子句中使用哪些锁定提示来防止更改选定的库存记录?

编辑:因此,感谢约翰,一个好的解决方案似乎是将事务隔离级别设置为REPEATABLE
READ。这将确保“在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据”。


问题答案:

实际上,最好设置事务隔离级别,而不要使用查询提示。

联机丛书中的以下参考资料提供了每个不同隔离级别的详细信息。

http://msdn.microsoft.com/en-
us/library/ms173763.aspx

这是一篇很好的文章,解释了SQL Server中各种类型的锁定行为,并提供了示例。

http://www.sqlteam.com/article/introduction-to-locking-in-sql-
server



 类似资料:
  • 由于请求的不同用法和注释,我一直很困惑

  • 问题内容: 我已经看到了同时使用,并为 不等于 。首选语法是什么,为什么? 我喜欢,因为让我想起。 问题答案: 从技术上讲,如果您使用SQL Server AKA T-SQL,它们的功能相同。如果您在存储过程中使用它,则没有性能上的理由要使用另一个。然后归结为个人喜好。我更喜欢使用<>,因为它符合ANSI。 您可以在以下位置找到各种ANSI标准的链接: http://en.wikipedia.or

  • 问题内容: 我试图了解如何使用类型提示。从PEP-484,我知道我可以使用的无论是作为或。 但是下面的例子呢? 如果似乎与表示相同的意思,我为什么要全部使用? 问题答案: 是的简写表示法,它告诉类型检查器特定类型的对象是必需的 还是 必需的。代表 任何有效的类型提示 ,包括复杂的复合类型或更多类型。只要您有带有默认值的关键字参数,就应该使用。 因此,对于您的两个示例,您有和容器类型,但是关键字参数

  • 我将guava jar文件添加到类路径中,但我的IDE(eclipse)说: Nullable无法解析为类型 但如果我ctrl+单击Nullable,我会看到蓝色下划线,然后看到下划线:

  • 问题内容: 在这个问题中,如何在C 11中有效地选择标准库容器?是选择C 集合时要使用的便捷流程图。 我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,因此我试图找到类似的Java流程图,但未能做到。 哪些资源和“备忘单”可用来帮助人们选择使用Java进行编程时使用的正确Collection?人们如何知道应该使用哪些List,Set和Map实现? 问题答案: 由于找不到相似的流程图

  • 在这个问题中,如何在C 11中有效地选择标准库容器?是选择C集合时使用的方便流程图。 我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,所以我试图找到一个类似的Java流程图,但没能做到。 有哪些资源和“备忘单”可以帮助人们在用Java编程时选择正确的集合?人们如何知道他们应该使用什么列表、集合和映射实现?