`
free_bird816
  • 浏览: 205840 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

sqlserver的updlock锁 (转)

 
阅读更多
UPDLOCK
  读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。
  这是SqlServer2000中对更新锁的说明.
  当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的<zmkey class="zoomino-searchword" style="FONT-WEIGHT: bold; FLOAT: none; CURSOR: pointer; MARGIN-RIGHT: 3px; BORDER-BOTTOM: #ff6c00 2px dotted; cssFloat: none" offset="45" path="body &gt; div:eq(0) &gt; div:eq(3) &gt; table:eq(2) &gt; tbody:eq(0) &gt; tr:eq(0) &gt; td:eq(0) &gt; div:eq(0) &gt; #content:eq(0) &gt; br:eq(2)" anchortype="previous" jquery1240903274453="6">线程<img class="zoominoBgImage" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; DISPLAY: inline; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: medium none; WIDTH: 12px; PADDING-TOP: 0px; BORDER-BOTTOM: medium none; HEIGHT: 14px; cssFloat: none" src="http://www.zoomino.cn/static-ox/images/z-keyword.gif"></zmkey>中是不能更改的只能等本线程的事务结束后才能更改,我如下示例:
  BEGIN TRANSACTION --开始一个事务
  SELECT Qty
  FROM myTable WITH (UPDLOCK)
  WHERE Id in (1,2,3)
  UPDATE myTable SET Qty = Qty - A.Qty
  FROM myTable AS A
  INNER JOIN @_Table AS B ON A.ID = B.ID
  COMMIT TRANSACTION --提交事务
  这样在更新时其它的线程或事务在这些语句执行完成前是不能更改ID是1,2,3的记录的.其它的都可以修改和读,1,2,3的只能读,要是修改的话只能等这些语句完成后才能操作.从而保证的数据的修改正确.
分享到:
评论
1 楼 Kesin97 2013-03-29  
不错 很有用。选择性锁也不太影响性能。

相关推荐

    SQLserver锁和事务隔离级别的比较与使用[定义].pdf

    SQL Server 锁和事务隔离级别的比较与使用 在数据库系统中,锁和事务隔离级别是两个非常重要的概念,它们之间存在着紧密的关系。在本文中,我们将对 SQL Server 锁和事务隔离级别进行比较和使用的介绍。 首先,让...

    MS SQL SERVER动态锁分析与应用.pdf

    【MS SQL SERVER动态锁分析与应用】 SQL SERVER是一款广泛应用的关系型数据库管理系统,其动态锁机制是确保多用户环境下数据一致性和安全性的关键技术。动态锁在SQL SERVER中扮演着至关重要的角色,它能够自动选择...

    SQL Server死锁产生的原因及解决办法

    SQL Server死锁是数据库系统中常见的问题,它发生在两个或多个事务之间,因为它们相互等待对方释放资源,导致事务无法继续执行。理解死锁的原因和解决策略对于优化数据库性能至关重要。 首先,我们要深入理解死锁的...

    SQLserver锁和事务隔离级别的比较与使用

    SQL Server的锁机制和事务隔离级别是数据库管理系统中确保数据一致性、避免并发问题的重要机制。在SQL Server中,锁主要用于控制多个用户同时访问同一数据时的并发操作,而事务隔离级别则是确定在事务中如何处理这些...

    sqlserver2008锁表语句详解(锁定数据库一个表)

    `SELECT * FROM table WITH (UPDLOCK)` 会施加修改锁,使得在读取数据时,SQL Server使用的是更新锁而不是共享锁,这样在事务期间,只有当前事务可以更新选定的行,其他事务只能读取,不能修改。 5. **TABLOCK**:...

    sqlserver 锁表语句分享

    SQL Server 锁表语句分享 在 SQL Server 中,锁机制是数据库并发性和高性能的关键。锁机制可以防止多个事务同时访问数据库中同一个资源,从而避免数据的不一致和丢失。SQL Server 提供了多种锁机制,包括共享锁、排...

    sql server 语句优化

    - **优化锁机制**:使用合适的锁定模式(如`NOLOCK`, `HOLDLOCK`, `UPDLOCK`, `TABLOCKX`等)以减少锁定时间,提高并发性能。 - **优化查询提示**:通过使用查询提示来控制查询优化器的行为,如`OPTION (RECOMPILE)`...

    sqlserver锁表、解锁、查看销表的方法

    在SQL Server中,锁是管理并发访问数据的关键机制,它确保了数据的一致性和完整性。本文将详细讨论SQL Server中的锁表、解锁以及查看锁表的方法,并解释SELECT语句中的加锁选项。 首先,让我们来看如何锁表。SQL ...

    SQL Server 2000 并发控制

    - 通过在SQL语句中加入特定的锁提示,可以人工设定SQL Server 2000中的锁定类型。例如: - 使用共享锁保持到事务结束:`SELECT * FROM Courses WITH (TABLOCK, HOLDLOCK);` - 火车订票系统的更新锁实现:通过`...

    sql server 性能优化(生产中常用)

    NOWAIT是一个与锁相关的选项,它用于指示SQL Server不要等待获取锁,而是立即返回。在并发控制和锁管理中,合理使用NOWAIT可以提高数据库操作的响应速度。 26. NOLOCK使用 NOLOCK是一种锁提示,它允许事务读取未...

    sql锁表与解锁

    SQL Server 提供了多种锁表方式,包括共享锁、排它锁、修改锁等。 锁表语句 锁表语句用于锁定数据库的一个表。例如,以下语句将锁定一个名为 "table" 的表: SELECT * FROM table WITH (HOLDLOCK) 这条语句将...

    SQL Server锁介绍及死锁原因

    SQL Server的锁机制是数据库管理系统中用于控制并发访问的关键组件,它确保了多个用户和进程在访问数据库时的正确性和一致性。死锁是并发控制中可能出现的问题,当两个或多个事务互相等待对方释放资源时就会发生。...

    C#的Sql server学习笔记

    ### C#连接与操作SQL Server数据库及锁机制详解 #### 一、多程序并发更新同一行的不同字段 在多线程或多程序环境下,确保数据的一致性和完整性是非常重要的。当多个程序试图同时更新数据库表中同一行的不同字段时...

    SQLServer中防止并发插入重复数据的方法详解

    总之,防止SQL Server中的并发插入重复数据可以通过多种方式实现,包括数据库级别的约束、条件查询以及事务隔离级别和锁的巧妙使用。在设计数据库时,应根据具体业务需求和预期的并发负载来选择最合适的策略。

    50种方法优化SQL Server数据库查询

    在IT行业中,优化SQL Server数据库查询是提升系统性能的关键步骤之一。本文将深入解析50种方法,旨在帮助数据库管理员和开发人员优化SQL Server数据库查询效率。这些方法涵盖了多个方面,包括索引优化、硬件配置调整...

    SELECT语句中加锁选项的功能说明

    - NOLOCK选项指示SQL Server在执行SELECT操作时不使用任何锁。这意味着查询可以立即返回结果,而不必等待其他事务释放锁,提高了查询速度。然而,这也意味着查询可能会读取到未提交的数据,即“脏数据”,可能导致...

    探讨SQL Server并发处理队列数据不阻塞解决方案

    `READPAST`告诉SQL Server引擎跳过已被锁定的行,这样即使有其他事务持有锁,当前事务也可以继续处理未被锁定的行。结合`WITH (updlock, readpast)`,我们可以避免阻塞,如下所示: ```sql SELECT TOP 1 @queueid =...

Global site tag (gtag.js) - Google Analytics