zoukankan      html  css  js  c++  java
  • sql server update时,是行锁还是表锁

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

  • 相关阅读:
    Zend Studio下调试PHP的一点注意事项
    使用FTP出现中文乱码解决方案
    C++数据类型与C#对应表
    FineUI 开发B/S系统
    c#调用带输出参数的存储过程
    经典FormsAuthenticationTicket 分析
    C# Oracle数据库操作类实例详解
    如何使用C#的Hashtable[哈希表]
    对三层架构的理解
    C# 最简单的三层架构实例 ——转载自网易博客
  • 原文地址:https://www.cnblogs.com/chucklu/p/10178274.html
Copyright © 2011-2022 走看看