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

锁定数据库的一个表

复制代码 代码如下:

SELECT * FROM table WITH (HOLDLOCK)

注意: 锁定数据库的一个表的区别

复制代码 代码如下:

SELECT * FROM table WITH (HOLDLOCK)

其他事务可以读取表,但不能更新删除

复制代码 代码如下:

SELECT * FROM table WITH (TABLOCKX)

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

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

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

功能说明: 

NOLOCK(不加锁)

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

HOLDLOCK(保持锁)

此选项被选中时,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) 其他事务不能读取表,更新和删除

时间: 2024-10-09 04:12:56

sqlserver2008锁表语句详解(锁定数据库一个表)_mssql2008的相关文章

专家为您详解JAVA数据库基本操作

数据|数据库|详解 java 数据库基本操作1.java数据库操作基本流程2.几个常用的重要技巧:     可滚动.更新的记录集     批量更新     事务处理 java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1.取得数据库连接  1)用DriverManager取数据库连接   例子    String className,url,uid,pwd;    className = "oracle.jdbc.driver.OracleDri

android应用开发详解里的一个例子

问题描述 android应用开发详解里的一个例子 我导入的书上例子可以运行,照着书打进去的代码就不能运行,同样从例子里面复制过来的代码也不能运行,MainActivity可以显示,但是点击register后跳转的ResultActivity就不能显示,模拟器弹出has stopped字样,求解答 以下是代码 package com.amaker.test; import android.app.Activity; import android.content.Intent; import and

javascript jquery-jquery中getScript()的用法详解,从一个远程js文件中读取数据

问题描述 jquery中getScript()的用法详解,从一个远程js文件中读取数据 第一个html文件: <html> <head> <script type="text/javascript" src="jquery-2.1.3.js"></script> $.getScript("shuj.js",function(){alert("aaaaa");}) </hea

详解AngularJS中的表单验证(推荐)_AngularJS

AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则式,很方便的完成验证,理论上所有的验证都可以用正则式完成 //javascript $scope.mobileRegx = "^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\\d{8}$"; $scope.emailRegx = "^[a-z]([a-z0-9]*[-_]?

是不是用JAVA做的BS项目里 javabean就对应数据库一个表 javabean必须有一个主键ID 对应数据库里表的主键 是这样吗

问题描述 是不是用JAVA做的BS项目里javabean就对应数据库一个表javabean必须有一个主键ID对应数据库里表的主键是这样吗 解决方案 解决方案二:请教各位大牛一下是这样的吗解决方案三:没人指点下嘛解决方案四:不是必须的.主要看业务.解决方案五:引用3楼chouy的回复: 不是必须的.主要看业务. 那hibernate不是都要指定主键生成器吗解决方案六:这样做最好了,省的想太多,如果某些表的某些字段经常使用,也可以考虑抽取出来解决方案七:最好指定ID

mysql 锁表语句与解锁表详解

页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM. 行级的典型代表引擎为INNODB. 很多操作都是读表. 在严格条件的索引上读取和更新,当更新或者删除可以用单独的索引来读取得到时: UPDATE tbl_name SET column=value WHERE unique_key_col=key_value; DELETE FROM tbl_name WHERE unique_key_col=key_value; SELECT 和 INSERT

Java多线程编程中使用Condition类操作锁的方法详解_java

Condition的作用是对锁进行更精确的控制.Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的notifyAll()方法.不同的是,Object中的wait(),notify(),notifyAll()方法是和"同步锁"(synchronized关键字)捆绑使用的:而Condition是需要与"互斥

sqlserver 锁表语句分享_MsSql

锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SELECT 语句中"加锁选项"的功能说明 SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Ser

sql注入之新手入门示例详解_数据库其它

前言 在学习这篇文章之前,至于要学习了SQL注入的前提知识,可以参考之前写的一篇sql注入之必备的基础知识. 认识SQL注入 最开始就从最简单的开始,进入到less-1开始我们的SQL注入学习之旅. 通过改变http://localhost/sqlilabs/Less-1/?id=3的id值,页面上呈现不同的内容(username,password). 那么我们就可以猜测在后台中的SQL语句就是根据前台传入的id值来去对应的数据. 那么SQL语句的写法为: select username,pas