关于Update语句的锁
关于Update语句的锁
环境:MSSQL2005,在Read Committed级别
语句A:
begin tran
Update Table Set f1='xxx' where f2='ttt'  --更新一行或多行
--commit;  //注意为了看到效果这里把commit注释了
语句A影响的行集合为B
该语句造成的影响
1.该语句会阻塞,查询结果集合含有任意B集合中的行的select 语句
2.该语句会阻塞,对该表其它行(B集合以外)进行Update操作的语句
语句B:
Update Table Set f4='xxxx' where f3='xxx' ,注意 这里的f3列上无索引,否则不会阻塞。
 问题分析:
 当update 语句的where条件涉及列是非索引列时,MSSQL查询引擎会执行全表扫描,在这个过程中会对每一行加上U锁,如果该行是目标行,那么U锁会升级成X锁,然后进行更新操作,而非目标行的U锁会在数据读取完后马上释放
如下图
如果你没有执行commit语句,可以使用SP_Lock查看update查询进程的锁情况
这个时候当语句B执行时,B需要在每行上获取一次U锁,这个时候就会碰到上面未释放的X锁定行
当然如果语句B中的where 条件使用的是索引列,那么语句B只会在索引涉及的列上加U锁,如果A,B更新查询的影响行无交集那么A,B查询互不影响。
图)设置sql profiler的Lock项目
关于Update语句的锁的更多相关文章
- (转)关于Update语句的锁
		原文地址:http://www.cnblogs.com/wdfrog/p/3144020.html 环境:MSSQL2005,在Read Committed级别 语句A:begin tranUpdat ... 
- mysql for update语句
		我们都知道for update语句会锁住一张表,锁表的细节很多人却不太清楚,下面我们举例看下. 在表上我们有个索引,如下: 现在在我们通过索引store_id锁表: 我们再开一个客户端,还是锁住同一个 ... 
- 一条update语句到底加了多少锁?带你深入理解底层原理
		迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ... 
- Select For update语句浅析 (转)
		Select … for update语句是我们经常使用手工加锁语句.通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作.同时,在多版本一致读机制的支持下,select语句 ... 
- Oracle Update 语句语法与性能分析 - 多表关联
		Oracle Update 语句语法与性能分析 - 多表关联 为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create ... 
- Mysql执行Update操作时会锁住表
		update tableA a,(select a.netbar_id,sum(a.reward_amt) reward_amt from tableB a group by a.netbar_id) ... 
- ORACLE多表关联UPDATE 语句
		转载至:http://blog.itpub.net/29378313/viewspace-1064069/ 为了方便起见,建立了以下简单模型,和构造了部分测试数据:在某个业务受理子系统BSS中, SQ ... 
- update语句的执行步骤及commit语句的执行顺序
		update语句的执行步骤和其他DML语句的执行步骤是一样的包含insert .delete语句等,执行步骤如下: 一.如果数据和回滚数据不在数据库高速缓存区中,则oracle服务器进程将把他们从数据 ... 
- oracle执行update语句时卡住问题分析及解决办法
		转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ... 
随机推荐
- c# 官方命名规则
			官方的哦. https://msdn.microsoft.com/zh-cn/library/vstudio/ff926074(v=vs.110).aspx 
- 去掉UITableView HeaderView或FooterView随tableView 移动的黏性
			去掉UITableView HeaderView或FooterView随tableView 移动的黏性(sticky) 控制器中实现以下方法即可: - (void)scrollViewDidScrol ... 
- jQuery选中该复选框来实现/全部取消/未选定/获得的选定值
			<!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ... 
- nodejs开发aspnet5项目
			结合nodejs开发aspnet5项目 1.安装kvm 官方教程地址:https://github.com/ligershark/Kulture 打开 powershell命令窗口,找不到可以在开 ... 
- APUE学习笔记(1):APUE运行环境
			APUE全称<Advanced Programming in the UNIX Environment>(UNIX环境高级编程) 书中例子大都使用作者自己写的头文件,所以需要解决一下,还好 ... 
- DDD分层架构之领域实体(基础篇)
			DDD分层架构之领域实体(基础篇) 上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自<领域驱动设计C#2008实现>,另外参考了网上找到的一些示 ... 
- android App Widgets
			http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#design http://develope ... 
- Android开源框架Volley(Google IO 2013)源代码及内部实现分析
			1.Volley概述 在项目开发过 程中,博主曾写过大量的访问网络重复代码,特别是ListView adapter很难避免getView()方法不被重复调用,如果ImageView不利用缓存机制,那么 ... 
- springmvc3.1.1+hibernate4
			上篇介绍了基本的配置,这篇着重介绍与hibernate4整合. 1.web.xml文件中加入spring-hibernate的配置.新的web.xml文件内容如下: <?xml version= ... 
- MFC双缓冲和裁剪问题导致闪烁
			问题描述: 应用场景:在对话框中,自定义一个MFC图形控件(为了描述方便,暂定为HSPaintControl),控件覆盖整个对话框的客户区,属于最底层的控件,在这之上放置了很多其他的小图形控件. 问题 ... 
