当前位置: 首页 > 知识库问答 >
问题:

使用事务隔离级别可序列化时的锁范围

夏景同
2023-03-14

以下链接描述了可序列化事务隔离级别。

http://blogs . msdn . com/b/sqlcat/archive/2011/02/20/concurrency-series-basics-of-transaction-isolation-levels . aspx

假设我有一个用户更新表 [dbo]。Table_A]。另一个用户正在更新表 [dbo]。Table_B]。我想序列化这两个更新语句(意味着在第二个语句开始之前等待第一个完成),尽管我们正在接触不同的表。我猜我不能使用表格锁,但也许范围锁可以做到这一点。有人可以帮助我理解代码可能是什么样子的吗?或者这不适用于 SQL Server 2008 中的事务隔离级别功能?

共有1个答案

弘焕
2023-03-14

您可以放置应用程序锁:

EXEC  sp_getapplock @resource = 'my_resource_token', @lockMode = 'Exclusive'

UPDATE ...

EXEC  sp_releaseapplock @resource = 'my_resource_token'

如果另一个会话已获取my_resource_token,则会锁定。

 类似资料:
  • 我有点理解实体锁定和事务隔离级别的目的,但不能得到悲观锁定和可序列化级别之间的区别。据我所知,在这两种情况下,表都被锁定,其他事务都无法访问它,因此在这两种情况下,防止并发修改的操作都是由DB执行的,看起来没有什么区别。谁能解释一下这里是否真的有区别?

  • 我似乎无法找到一个简单的问题的直接答案。如果我在 T-SQL 中创建事务并将隔离级别设置为可序列化,这是否会在我正在修改的表上创建读取锁?

  • 日安,我了解什么是可序列化的隔离级别以及它与Postgres中的有何不同。可序列化事务能够检测读写周期,因此只有第一次提交会成功。 考虑到这一点,使用行版本控制的乐观锁定是否有意义?行版本控制的行为方式完全相同,如果版本列已更新,则将抛出 Java 异常,这将回滚事务。此外,根据Postgres维基,如果某些更新是在应用程序级代码之外完成的(例如由psql运行的纯SQL查询),则必须创建触发器。所

  • 我已经阅读了大约4个级别的隔离: 我想了解每个事务隔离在表上使用的锁 以下是事务隔离中可能出现的三种现象 脏读取-无锁定 不可重复读取-无脏读取作为对提交数据的锁定 幻影读取-锁定sql块(使用select query选择) 我想了解我们在哪里定义这些隔离级别:仅在jdbc/hibernate级别或在DB中定义 PS:我已经浏览了oracle中隔离级别的链接,但是它们看起来很笨拙,而且只针对数据库

  • 我试图理解锁定如何与隔离级别一起工作。我已经回答了这个问题,但无法理解给定打击的流 在这里,我在不同的终端中启动两个事务,并在其中读取同一行。当我尝试更新它们时,两个终端都在等待更新。除此之外,没有其他查询正在运行 这是我做的一系列步骤 这是我的第一个问题 这里我想了解为什么两个连接都在等待,以及它们是否是谁拥有更新行的锁? 如果我将上述步骤更改为 在这种情况下,不同的是我可以看到conn1有锁,

  • 本文向大家介绍mysql的事务,隔离级别和锁用法实例分析,包括了mysql的事务,隔离级别和锁用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了mysql的事务,隔离级别和锁用法。分享给大家供大家参考,具体如下: 事务就是一组一起成功或一起失败的sql语句。事务还应该具备,原子性,一致性,隔离性和持久性。 一、事务的基本要素 (ACID) 1、原子性:事务开始后,所有的操作,要么