`
wjboy49
  • 浏览: 284672 次
  • 性别: Icon_minigender_1
  • 来自: 湖南岳阳
社区版块
存档分类
最新评论

SQL Server数据库锁机制及类型

阅读更多

 Microsoft SQL Server(以下简称SQL Server)作为一种中小型数据库管理系统,已经得到了广泛的应用,该系统更强调由系统来管理锁。在用户有SQL请求时,系统分析请求,自动在满足锁定 条件和系统性能之间为数据库加上适当的锁,同时系统在运行期间常常自动进行优化处理,实行动态加锁。

  对于一般的用户而言,通过系统的自动锁定管理机制基本可以满足使用要求,但如果对数据安全、数据库完整性和一致性有特殊要求,就必须自己控制数据库的锁定和解锁,这就需要了解SQL Server的锁机制,掌握数据库锁定方法。

  锁的多粒度性以及锁升级

   数据库中的锁是指一种软件机制,用来指示某个用户(也即进程会话,下同)已经占用了某种资源,从而防止其他用户做出影响本用户的数据修改或导致数据库数 据的非完整性和非一致性。这儿所谓资源,主要指用户可以操作的数据行、索引以及数据表等。根据资源的不同,锁有多粒度(multigranular)的概 念,也就是指可以锁定的资源的层次。SQL Server中能够锁定的资源粒度包括:数据库、表、区域、页面、键值(指带有索引的行数据)、行标识符(RID,即表中的单行数据)。

   采用多粒度锁的重要用途是用来支持并发操作和保证数据的完整性。SQL Server根据用户的请求,做出分析后自动给数据库加上合适的锁。假设某用户只操作一个表中的部分行数据,系统可能会只添加几个行锁(RID)或页面 锁,这样可以尽可能多地支持多用户的并发操作。但是,如果用户事务中频繁对某个表中的多条记录操作,将导致对该表的许多记录行都加上了行级锁,数据库系统 中锁的数目会急剧增加,这样就加重了系统负荷,影响系统性能。因此,在数据库系统中,一般都支持锁升级(lock escalation)。所谓锁升级是指调整锁的粒度,将多个低粒度的锁替换成少数的更高粒度的锁,以此来降低系统负荷。在SQL Server中当一个事务中的锁较多,达到锁升级门限时,系统自动将行级锁和页面锁升级为表级锁。特别值得注意的是,在SQL Server中,锁的升级门限以及锁升级是由系统自动来确定的,不需要用户设置。

  SQL Server锁类型

  1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。

  2. NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。

  3. PAGLOCK:指定添加页锁(否则通常可能添加表锁)。 

  4. READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上操作。。 

  5. READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,READPAST仅仅应用于READ COMMITTED隔离性级别下事务操作中的SELECT语句操作。 

  6. READUNCOMMITTED:等同于NOLOCK。 

  7. REPEATABLEREAD:设置事务为可重复读隔离性级别。 

  8. ROWLOCK:使用行级锁,而不使用粒度更粗的页级锁和表级锁。  

  9. SERIALIZABLE:用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于 HOLDLOCK。 

  10. TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,SQL Server在该语句执行完后释放这个锁,而如果同时指定了HOLDLOCK,该锁一直保持到这个事务结束。  

  11. TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。 

   12. UPDLOCK :指定在读表中数据时设置更新 锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且 保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。

分享到:
评论

相关推荐

    sql server锁机制

    SQL Server的锁机制是数据库管理系统中用于控制并发访问和维护数据完整性的重要机制。它确保了在多用户环境中,数据能够被正确地读取和修改,防止出现数据不一致的情况。以下是对SQL Server锁机制的详细解释: 1. *...

    MS SQL Server数据库锁技术研究.pdf

    MS SQL Server 数据库锁技术是数据库管理系统中的一种重要机制,用于确保数据库的安全、完整性和一致性。在多用户环境下,数据库锁机制可以防止用户之间的冲突,并确保数据的一致性。本文将对 MS SQL Server 数据库...

    浅析SQL Server数据库事务锁机制.pdf

    总之,SQL Server数据库事务锁机制涉及到锁的概念、锁的多粒度性、锁升级、锁的模式和兼容性、锁冲突及防止方法等多个方面。数据库管理员和开发人员需要深入理解这些知识点,以合理地管理事务锁,确保数据库操作的...

    MS SQL Server数据库事务锁机制分析

    MS SQL Server 数据库的事务锁机制是确保数据库完整性和一致性的关键组成部分,它涉及到多用户环境下的并发控制和数据安全。锁是一种软件机制,用于防止多个用户在同一时间对同一资源进行冲突操作,确保数据的一致性...

    c# asp.net实现sql server数据库备份

    总之,使用C#和ASP.NET实现SQL Server数据库备份,主要涉及SMO库的使用,通过编写代码来配置备份类型、设备和选项,然后调用SqlBackup方法执行备份。在实际应用中,还需要考虑错误处理、日志记录、备份策略规划等...

    SQL Server数据库的缓冲机制

    ### SQL Server数据库的缓冲机制 #### 一、概述 在.NET Framework 2.0中引入了一个重要的特性——SQL缓存依赖(SQL Cache Dependency),这一机制主要用于确保缓存中的数据能够实时地反映数据库中的最新状态。当...

    关于SQL Server数据库安全

    SQL Server 可根据访问用户所属的用户类型,利用 GRANT 等语句来对数据库或数据库对象作权限的控制,能够较为完善地支持自主访问控制策略。 审计功能是数据库安全机制的重要组成部分,用于监视和记录用户对数据库所...

    SQLSERVER数据库中存储BLOB类型数据,在线等现在公司要求用PB6.5+SQLser

    ### SQL Server 数据库中存储 BLOB 类型数据详解 #### 一、背景介绍 在当前企业信息化建设过程中,经常会遇到需要处理大量非结构化数据的情况,例如图片、文档等二进制大对象(BLOB)。这类数据由于体积庞大且结构...

    C# SQL Server数据库操作DLL

    在.NET开发环境中,C#与SQL Server数据库的交互是常见的任务。这个压缩包"**C# SQL Server数据库操作DLL**"提供了一种便捷的方式,通过一个动态链接库(DLL)来处理这些操作,免去了手动编写大量基础数据库访问代码...

    C++使用ADO连接SQL Server数据库源代码

    当需要在C++程序中与SQL Server数据库交互时,通常会采用ActiveX Data Objects(简称ADO)技术。以下将详细讲解如何使用C++通过ADO连接到SQL Server数据库,并基于提供的"ConnDatabase"源代码进行学习。 1. ADO简介...

    Revit与SQLServer数据库的交互(免费下载)

    在Revit建筑信息模型(BIM)软件中进行二次开发,可以极大地拓展其功能,实现与外部数据源如SQL Server数据库的高效交互。本教程重点探讨如何利用Revit API与SQL Server数据库进行数据交换,从而提升工程项目的管理和...

    SqlServer数据库下载

    根据提供的信息,“SqlServer数据库下载”这一主题主要围绕着如何获取并安装SQL Server数据库软件进行讨论。下面将对SQL Server数据库的基本概念、下载与安装过程、以及相关的重要知识点进行详细介绍。 ### SQL ...

    《SQL Server数据库原理及应用》

    《SQL Server数据库原理及应用》是一本深入探讨SQL Server数据库管理系统的专著,旨在帮助读者理解和掌握SQL Server的核心概念、设计原则以及实际操作技巧。本书覆盖了从基础理论到高级特性的广泛内容,适合数据库...

    SQLSERVER数据库系统安全保护机制研究

    SQLSERVER数据库系统安全保护机制研究

    sqlserver数据库jar包

    SQL Server数据库是一个由微软公司开发的关系型数据库管理系统(RDBMS),它在企业级数据存储、管理和处理方面扮演着重要角色。SQL Server数据库jar包是Java开发者用来与SQL Server进行交互的重要工具,它包含了JDBC...

    SQL Server数据库管理精品电子书

    《SQL Server数据库管理精品电子书》是一本专为IT专业人士准备的深度学习资源,由51CTO提供,旨在帮助读者全面掌握SQL Server数据库的管理和优化技巧。这本书涵盖了SQL Server数据库的基础知识、高级特性和实战应用...

    SQLServer数据库优化之50种方法

    本文将根据给定的信息,详细阐述部分重要的SQL Server数据库优化方法,并对这些方法进行深入解读。 #### 1. 避免不必要的查询 - **概述**:避免执行那些实际上并不需要的查询操作,比如在编写存储过程或触发器时,...

    Siemens S7 1200 PLC连接SQLSERVER数据库

    为了实现数据的集中管理和分析,有时我们需要将这些控制器的数据与SQL Server数据库进行集成。本篇文章将深入探讨如何将Siemens S7 1200 PLC连接到SQL Server数据库,以便于数据的存储、查询和处理。 首先,理解...

    SQL Server数据库占用过多内存的解决方法

    ### SQL Server数据库占用过多内存的解决方法 #### 内存使用概述 在SQL Server数据库运行过程中,内存管理是一项至关重要的任务。SQL Server会利用内存来提高数据访问速度和查询性能。其中,数据缓存占据内存的...

    SQL Server 数据库基础

    【SQL Server 数据库基础】 SQL Server 是由微软公司开发的关系型数据库管理系统,它在IT行业中扮演着重要角色,尤其在企业级数据存储和管理中。本章主要介绍SQL Server的基础知识,包括其简介、安装过程以及一些...

Global site tag (gtag.js) - Google Analytics