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

解决方案 »

  1.   

    udpate table a 
    set column1 = 1 
    where idx = 1
    ---------------------
    如果你的idx是主键那么就是行级锁
    如果不是主键那么是页级索如果 where 条件那么就表级锁了
      

  2.   

    看表结构, 如果没有主键无法只锁定行如果楼主要验证的话, 只需要类似下面的方法就行了:-- 开事务, 以保持锁
    BEGIN TRAN-- 更新
    update table a 
    set column1 = 1 
    where idx = 1-- 列出锁信息
    EXEC sp_lock @@spid-- 提交或者回滚事务
    COMMIT/ROLLBACK TRAN
      

  3.   

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

  4.   

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

  5.   

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

  6.   

    MARK一下,大大的话还不懂,以后再来学习。
      

  7.   

    是否是什么锁,跟索引还有你update 的行数量是有关系的,比如 update table set ...where  sex='男' 这样的语句,你说是什么锁,我觉得一开始可能是行锁,但很快会变为页锁,sex='男'的行太多了,最后变成了表锁.有兴趣加我的qq群32097372
      

  8.   

    spid   dbid   ObjId       IndId  Type Resource                   Mode     Status
    ------ ------ ----------- ------ ---- -------------------------- -------- ------
    53     1      1115151018  0      TAB                             IS       GRANT显示的结果无法知道是哪个对象,可以使用下面的语句来查看
    Select * From sysdatabases where dbid=[dbid]   --数据库
    Select * from sysobjects where id=[ObjId]      --表或其他对象
    Select * from sysindexes where id=[IndId]      --索引
    --此处[]内为表中对应列的值
      

  9.   


    crazycyber:你好!
    截至 2011-02-24 03:53:06 前:
    你已发帖 35 个, 未结贴 4 个;
    结贴率为: 88.57%
    [
      

  10.   

    我觉得还在于idx=1的有多少行,如果绝大多数都是idx=1,应该使用表锁。
      

  11.   

     行锁where   idx   =   1