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

  • 相关阅读:
    微信公众账号第三方平台全网发布源码(java)- 实战测试通过
    程序员常访问的国外技术交流网站
    程序员常访问的国外技术交流网站
    程序员都怎么过端午节?
    程序员都怎么过端午节?
    程序员都怎么过端午节?
    WebApi Ajax 跨域请求解决方法(CORS实现)
    WebApi Ajax 跨域请求解决方法(CORS实现)
    WebApi Ajax 跨域请求解决方法(CORS实现)
    那个学完这个小程序创业课程的小白现在月入17万
  • 原文地址:https://www.cnblogs.com/chucklu/p/10178274.html
Copyright © 2011-2022 走看看