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

2016-02-19 10:01 53 1 收藏

下面是个超简单的sqlserver2008锁表语句详解(锁定数据库一个表)教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

锁定数据库的一个表
代码如下:

SELECT * FROM table WITH (HOLDLOCK)

注意: 锁定数据库的一个表的区别
代码如下:

SELECT * FROM table WITH (HOLDLOCK)


其他事务可以读取表,但不能更新删除
代码如下:

SELECT * FROM table WITH (TABLOCKX)


其他事务不能读取表,更新和删除

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

SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果。 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

功能说明: 

NOLOCK(不加锁)

此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”。

HOLDLOCK(保持锁)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。

UPDLOCK(修改锁)

此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。

TABLOCK(表锁)

此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据。

PAGLOCK(页锁)

此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。

TABLOCKX(排它表锁)

此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。

HOLDLOCK 持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别

NOLOCK 语句执行时不发出共享锁,允许脏读 ,等于 READ UNCOMMITTED事务隔离级别

PAGLOCK 在使用一个表锁的地方用多个页锁

READPAST 让sql server跳过任何锁定行,执行事务,适用于READ UNCOMMITTED事务隔离级别只跳过RID锁,不跳过页,区域和表锁

ROWLOCK 强制使用行锁

TABLOCKX 强制使用独占表级锁,这个锁在事务期间阻止任何其他事务使用这个表

UPLOCK 强制在读表时使用更新而不用共享锁

注意: 锁定数据库的一个表的区别
代码如下:

SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除

来源:https://www.tulaoshi.com/n/20160219/1593055.html

延伸阅读
  本节介绍一个样例数据库,这个数据库在本书各个部分都可能用到。在学习将MySQL投入工作时,这个数据库为您提供了参考的例子。我们主要从前面描述过的两种情形来给出例子:   ■ 机构的秘书方案。我们需要一些比“机构”更为明确的信息,所以现在就来构造一个,它具有这样一些特性:它由为了研究美国历史这个共同目的而聚集在一起...
锁定数据记录 ADO组件有一个非常好的属性LockType,可用于锁定记录,这样当一个更新开始之前可以去检查这个属性,如果还在锁定状态,则需要等待,以避免更新冲突.该属性具体说明如下: LockType 属性       指示编辑过程中对记录使用的锁定类型。 设置和返回值 设置或返回以下某个 LockTypeEnu...
标签: SQLServer
在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档,文件越来越大(也可用压缩修复的方式减小文件大小,但太麻烦),访问速度越来越慢,甚至会数据库损坏,损坏得比较轻的可以找第三方工具来修复,便严重时会导致数据库无法修复,或修复后数据记录会损坏。所以我们...
如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: Code: 代码如下: INSERT INTO 目标表 SELECT * FROM
一、目标 利用Sql Server 2008 enterprise X64,建立 异步 (高性能)镜像数据库,同时建立见证服务器实现自动故障转移。 二、前提条件、限制和建议 2.1 、伙伴双方(主体服务器和镜像服务器)及见证服务器必须使用 相同版本 的Sql Server 2.2 、如使用见证服务器,择须确保其系统上安装 Sql Server 2005 或更高 版本 ...

经验教程

245

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部