(转)关于Update语句的锁
原文地址:http://www.cnblogs.com/wdfrog/p/3144020.html
环境: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语句的锁
关于Update语句的锁 环境:MSSQL2005,在Read Committed级别 语句A:begin tranUpdate Table Set f1='xxx' where f2='ttt' ...
- 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语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...
随机推荐
- unidac连接ORACLE免装客户端驱动
当你选择Oracle作数据库服务器时,客户端一般需要装一个肥硕的200M左右客户端,而且还要做连接配置,尤其是C/S模式,客户端多的时候非常不便.当然,网上也有一个10M左右的Oracle精简客户 ...
- mongodb配置和基本操作
MongoDB3.0新特性WiredTigerMMAPv1可插拔引擎API基于web的可视化管理工具 查看版本号mongod --version启动数据库 mongod --dbpath $dbpat ...
- 求小球反弹高度,及落地过程中经过的路程~~~java代码
总结:这种思想,不是一想就突然出现在脑海里的 package com.c2; //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半: //再落下,求它在 第10次落地时,共经过多少米?第 ...
- Java-Maven-Runoob:Maven POM
ylbtech-Java-Maven-Runoob:Maven POM 1.返回顶部 1. Maven POM POM( Project Object Model,项目对象模型 ) 是 Maven 工 ...
- 1147 Heaps
1147 Heaps(30 分) In computer science, a heap is a specialized tree-based data structure that satisfi ...
- Box2D学习blog
http://www.ladeng6666.com/blog/category/box2d/
- Py修行路 python基础 (十三)匿名函数 与 内置函数
一.匿名函数 1.定义: 匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序. 2.语法格式:lambda 参数:表达式 lambda语句中,开头先写关键字lambda,冒号前是 ...
- DataTable改变column类型
1.必须先克隆DataTable 2.列换类型 3.逐行往新DataTable赋值,并转换某列类型 如: DataTable dt = diorg.Clone(); //必须先克隆,此时并不包含数据 ...
- nginx反向代理负载均衡初次配置
反向代理,我个人理解是通过一台反向代理服务器,把客户端的把有请求按照一定的规则分发给后台的服务器.nginx作反向代理服务器的虚拟机配置如下: upstream itest { #正常情况下应该作如下 ...
- leetcode427
本题不会做,从网上找到了python3的解法,记录如下. class Solution: def construct(self, grid): def dfs(x, y, l): if l == 1: ...