https://bbs.csdn.net/topics/120000749

http://www.cnblogs.com/s021368/articles/2148659.html

问题:

udpate  a  
set   column1   =   1  
where   idx   =   1
sqlserver   执行update语句的时候,是锁整张表的吧

分析:

看表结构,   如果没有主键无法只锁定行

如果楼主要验证的话,   只需要类似下面的方法就行了:

--   开事务,   以保持锁
BEGIN   TRAN

--   更新
update  a  
set   column1   =   1  
where   idx   =   1

--   列出锁信息
EXEC   sp_lock   @@spid

--   提交或者回滚事务
COMMIT/ROLLBACK   TRAN

输出的结果大致是这样:

通过   dbid,   ObjId   可以找到你更新的表相关的锁记录
如果   IndId   为   0   ,   表示锁在表上,   否则在对应的索引上
通过   Type   列,   可以确定被锁定的是行/表,   或者是其他,   并且可以通过   Mode   看到是什么锁
在Status   中,   还可以看到锁是已经加上了,   还是在等待其他资源释放(以取得加锁的权利)

spid       dbid       ObjId               IndId     Type  
Resource                                       Mode  
        Status
------   ------   -----------   ------   ----   --------------------------   --------   ------
53           1             1115151018     0            
TAB                                              
            IS               GRANT

锁的类型(Tyep   列值,   RID   和   KEY   的话,   表示锁在行上)   有如下几种:
RID   =   表中单个行的锁,由行标识符   (RID)   标识。
KEY   =   索引内保护可串行事务中一系列键的锁。
PAG   =   数据页或索引页的锁。
EXT   =   对某区的锁。
TAB   =   整个表(包括所有数据和索引)的锁。
DB   =   数据库的锁。
FIL   =   数据库文件的锁。
APP   =   指定的应用程序资源的锁。
MD   =   元数据或目录信息的锁。
HBT   =   堆或   B   树索引的锁。在   SQL   Server   2005   中此信息不完整。
AU   =   分配单元的锁。在   SQL   Server   2005   中此信息不完整。

其它:

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

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

sql server update时,是行锁还是表锁的更多相关文章

  1. Oracle\MS SQL Server Update多表关联更新

    原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...

  2. 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误

    编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...

  3. SQL SERVER Update from 使用陷阱

    原文:SQL SERVER Update from 使用陷阱 update A set from A left join B on 此方法常用来使用根据一个表更新另一个表的数据,来进行数据同步更新.若 ...

  4. SQL Server UPDATE语句的用法详解

    SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...

  5. 安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具

    已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具 错误提示:已安装 SQL Server 2005 E ...

  6. Java运行环境eclipse配置环境变量 sql server登录时用的账户以及注册码

    2019/1/18 13:44:53a:右键点击计算机  →  选择属性  →  更改设置  →  点击高级  →  点击环境变量  →  创建名为JAVA_HOME的环境变量  →  将jdk所在的 ...

  7. SQL Server查询时添加一列连续的自增列

    SQL Server查询时添加一列连续的自增列 在SQL Server数据库中表信息会用到Identity关键字来设置自增列.但是当有数据被删除的话,自增列就不连续了.如果想查询出这个表的信息,并添加 ...

  8. 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...

  9. sql锁的类型介绍:悲观锁,乐观锁,行锁,表锁,页锁,共享锁,排他锁,意向锁

    1 悲观锁,乐观锁 悲观锁:顾名思义,很悲观,就是每次拿数据的时候都认为别的线程会修改数据,所以在每次拿的时候都会给数据上锁.上锁之后,当别的线程想要拿数据时,就会阻塞,直到给数据上锁的线程将事务提交 ...

随机推荐

  1. TP ajax

    ①Ajax使用:   注意传值的所有过程用的是小写,及时数据库列的名称中有大写字母 控制器部分: AjaxController.class.php <?php namespace Home\Co ...

  2. EasyNVR智能云终端硬件与EasyNVR解决方案软件综合对比

    背景分析 互联网视频直播越来越成为当前视频直播的大势,对于传统的安防监控,一般都是局限于内网,无法成批量上云台.传统的海康和大华的平台虽然可以通过自身私有协议上云平台 集总管控,但是往往只是支持自身的 ...

  3. 记录--Gson、json转实体类、类转json

    需要导入Gson jar包 最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson ...

  4. 调用第三方物流公司API即时查询物流信息

    主要是利用快递鸟提供的物流服务,通过对接快递鸟的API,调用即时查询接口,获取物流信息. 这里采用java语言,调用快递鸟的接口为例.步骤如下: 1.首先,得去快递鸟的官方网站注册一个账号并进行实名认 ...

  5. Xamarin.Forms学习之Platform-specific API和文件操作

    这篇文章的分享原由是由于上篇关于Properties的保存不了,调用SavePropertiesAsync()方法也不行,所以我希望通过操作文件的方式保存我的需要的数据,然后我看了一下电子书中的第二十 ...

  6. Sublime Text 3如何快速生成HTML5的头部信息和常用的快捷键

    一.快速生成HTML5的头部信息的步骤: 1.Ctrl + N,新建一个文档: 2.Ctrl + Shift + P,打开命令模式,再输入 sshtml 进行模糊匹配,将语法切换到html模式: 3. ...

  7. coursera 《现代操作系统》 -- 第五周 同步机制(2)

    分清紧急等待队列与条件等待队列(c 链) 条件等待队列:但是进入管程的这个进程可能由于对资源的操作的过程中发现条件不成熟, 那么它就不能够继续对资源进行相应的操作. 我们以生产者. 消费者为例. 如果 ...

  8. 洛谷 P3393 逃离僵尸岛

    洛谷 这道题目其实是最短路裸题. 首先看到题目,要求的到"被占点"距离不大于S的点,自然想到了以"被占点"为源点,求一遍最短路,处理出"危险点&quo ...

  9. java integer String之equals vs ==

    Integer a = new Integer(123); Integer b = new Integer(123); System.out.println(a == b); System.out.p ...

  10. boost之内存池

    讲到内存池我们会想到对对象进行动态分配的过程new包含三个过程 1.使用operator new分配内存 2.使用placement new 初始化 3.返回内存地址. 分配内存可以分解成分配内存和获 ...