`
netxdiy
  • 浏览: 720441 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

讲解MSSQL数据库中SQL锁机制和事务隔离级别

SQL 
阅读更多
锁机制
NOLOCK和READPAST的区别。
1. 开启一个事务执行插入数据的操作。
BEGIN TRAN t
INSERT INTO Customer
SELECT 'a','a'
2. 执行一条查询语句。
SELECT * from Customer WITH (NOLOCK)
结果中显示"a"和"a"。当1中事务回滚后,那么a将成为脏数据。(注:1中的事务未提交) 。NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修改。
SELECT * from Customer
这条语句将一直死锁,直到排他锁解除或者锁超时为止。(注:设置锁超时SET LOCK_TIMEOUT 1800)
SELECT * from Customer WITH (READPAST)
这条语句将显示a未提交前的状态,但不锁定整个表。这个提示指明数据库引擎返回结果时忽略加锁的行或数据页。
3. 执行一条插入语句。
BEGIN TRAN t
INSERT INTO Customer
SELECT 'b','b'
COMMIT TRAN t
这个时候,即使步骤1的事务回滚,那么a这条数据将丢失,而b继续插入数据库中。
NOLOCK
1. 执行如下语句。
BEGIN TRAN ttt
SELECT * from Customer WITH (NOLOCK)
WAITFOR delay '00:00:20'
COMMIT TRAN ttt
注:NOLOCK不加任何锁,可以增删查改而不锁定。
INSERT INTO Customer SELECT 'a','b' –不锁定
DELETE Customer where ID=1 –不锁定
SELECT * from Customer –不锁定
UPDATE Customer SET Title='aa' WHERE ID=1 –不锁定
ROWLOCK
1. 执行一条带行锁的查询语句。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ -- (必须)
BEGIN TRAN ttt
SELECT * from Customer WITH (ROWLOCK) WHERE ID=17
WAITFOR delay '00:00:20'
COMMIT TRAN ttt
注:在删除和更新正在查询的数据时,会锁定数据。对其他未查询的行和增加,查询数据无影响。
INSERT INTO Customer SELECT 'a','b' –不等待
DELETE Customer where ID=17 –等待
DELETE Customer where ID<>17 –不等待
SELECT * from Customer –不等待
UPDATE Customer SET Title='aa' WHERE ID=17–等待
UPDATE Customer SET Title='aa' WHERE ID<>17–不等待
HOLDLOCK,TABLOCK和TABLOCKX
1. 执行HOLDLOCK
BEGIN TRAN ttt
SELECT * from Customer WITH (HOLDLOCK)
WAITFOR delay '00:00:10'
COMMIT TRAN ttt
注:其他事务可以读取表,但不能更新删除
update Customer set Title='aa' —要等待10秒中。
SEL ......
分享到:
评论

相关推荐

    深入分析MSSQL数据库中事务隔离级别和锁机制

    在MSSQL数据库中,事务隔离级别和锁机制是确保数据一致性、并发性和避免数据冲突的关键要素。事务隔离级别决定了事务在执行时与其他事务的交互方式,而锁机制则是实现这些隔离级别的具体手段。 首先,让我们理解...

    MSSQL与Oracle数据库事务隔离级别与锁机制对比

    理解事务隔离级别和锁机制对于优化数据库性能和保证数据一致性至关重要。根据具体应用场景选择合适的隔离级别,并合理利用锁机制,可以在保障数据安全的同时,提高系统的并发处理能力。在MSSQL和Oracle这样的大型...

    易语言mssql数据库操作实例

    在“易语言mssql数据库操作实例”中,我们将探讨如何利用易语言来与Microsoft SQL Server(简称mssql)进行交互,执行数据库的基本操作。SQL Server是一个功能强大的关系型数据库管理系统,广泛应用于企业级的数据...

    电信设备-基于MSSQL数据库的SQL信息采集审计系统.zip

    描述中的"电信设备-基于MSSQL数据库的SQL信息采集审计系统.zip"与标题相同,进一步强调了系统的专业领域和核心技术。".zip"表明提供的资源是一个压缩文件,其中包含了关于该系统的详细信息,可能是用户手册、设计...

    MSSQL数据库备份工具

    用于备份MSSQL数据库的工具软件,可按指定的计划备份MSSQL数据库,并将备份后的文件下载到本地。 该程序是站长必备工具。主要解决个人站长无法定时备份数据库的问题。 个人站长所使用的 MSSql 数据库服务器上一般都...

    MSSQL数据库附加还原助手

    Microsoft SQL Server(简称MSSQL)作为一款广泛使用的的关系型数据库管理系统,其稳定性和性能得到了广大用户的认可。然而,数据库的管理操作如附加、还原等并不总是那么简单,特别是对于非专业DBA来说。因此,...

    MSSQL数据库附加工具

    在IT领域,数据库是存储和管理数据的核心工具,而Microsoft SQL Server(简称MSSQL)是一种广泛使用的商业关系型数据库管理系统。"MSSQL数据库附加工具"是针对MSSQL数据库的一种实用功能,它允许用户将已存在的...

    php mssql扩展SQL查询中文字段名解决方法

    标题 "php mssql扩展SQL查询中文字段名解决方法" 描述了一个常见的问题,即使用PHP的mssql扩展处理SQL Server数据库中的中文字段名时遇到的查询错误。问题的关键在于,虽然SQL语句在SQL Server中可以正常运行,但在...

    mssql数据库修复工具

    如果数据库出现问题,可以通过回滚未完成的事务和重播已完成的事务来尝试恢复。在一些情况下,主数据库文件(.mdf)损坏,但日志文件(.ldf)完好,可以利用日志进行恢复。 2. **使用备份进行恢复**:定期备份是...

    MSSQL数据库SQL注入手册1

    MSSQL数据库SQL注入手册1

    nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例.docx

    本文中,我们只是简单地封装了连接 SQL Server 数据库的操作示例, readers 可以根据需要进行扩展和修改。同时,我们也可以使用连接池来提高性能。 Node.js 基于 mssql 模块连接 SQL Server 数据库的简单封装操作...

    C#实现MSSQL数据库附加

    Microsoft SQL Server(简称MSSQL)作为一款广泛使用的数据库管理系统,提供了丰富的功能来满足各种数据存储和处理需求。本篇将深入探讨如何使用C#编程语言来实现MSSQL数据库的附加功能,即把已有的MDF(主数据文件...

    MSSQL数据库日志清理和备份工具.rar

    在数据库管理中,日志清理和备份是至关重要的环节,尤其对于大型企业级应用来说,MSSQL(Microsoft SQL Server)数据库的稳定性和安全性直接关系到业务的正常运行。本文将详细探讨MSSQL数据库的日志清理与备份,并...

    Mssql数据库维护工具

    Mssql数据库维护工具是一款专为Microsoft SQL Server 2000设计的实用程序,旨在帮助数据库管理员有效地管理和优化他们的数据库环境。这款工具集成了多种功能,旨在提高数据库性能,确保数据的安全性和完整性,并简化...

    Mssql数据库恢复修复工具SQLSERVER

    标题提到的"Mssql数据库恢复修复工具SQLSERVER",是一种专门针对MSSQL Server数据库进行故障恢复和数据修复的工具。这类工具通常包含一系列高级功能,如备份恢复、日志分析、数据扫描、表结构重建等,旨在最大限度地...

    XlsToSql(把excel文件导入到MSSQL数据库中)

    `XlsToSql` 工具正是一款专为解决此类问题而设计的实用软件,它允许用户将Excel(Xls)文件中的数据高效地导入到Microsoft SQL Server (MSSQL)数据库中。这个过程通常称为数据导入或数据迁移,对于数据分析师、数据库...

    delphi XE5 ANDROID平台 调用 webservice并访问操作MSSQL数据库

    该函数使用 ADO 连接来连接 MSSQL 数据库,并执行 SQL 语句来获取数据。然后,将获取的数据转换为 XML 格式,并将其传递给客户端。 在客户端上,使用 THTTPRIO 控件来调用服务端的函数,并获取 XML 格式的数据。...

    教你暴MSSQL数据库

    教你暴MSSQL数据库教你暴MSSQL数据库教你暴MSSQL数据库教你暴MSSQL数据库

Global site tag (gtag.js) - Google Analytics