对于select语句:

1、当採用表扫描时,会直接锁定page,而不是锁定详细的某条记录,所以会有这些锁:

A、数据库S锁

B、表的IS锁

C、页的S锁

2、当採用索引来查找数据时,会锁定详细的记录,所以会有这些锁:

A、数据库S锁

B、索引中page的IS锁

C、索引中page中的key的S锁

D、表的IS锁

E、页的IS锁

F、RID的S锁

3、对于读过的页面,会加一个IS锁。

对于使用的索引,会对key加上S锁,对索引key所在的页面会加上IS锁。

在查询过程中,会对每一条读到的记录或key加上S锁。

假设记录不是我们要查找的,那么就会释放S锁,假设记录要返回,依据隔离级别,假设是read committed,那么会释放,否则就不会释放。

对于update语句:

1、当採用表扫描时,会直接锁定page,而不是锁定详细的某条记录,所以会有这些锁:

A、数据库S锁

B、表的IX锁

C、页的U锁 或者是X锁,两者的差别在于,因为update语句也是要先找到数据,才干进行改动,所以在查数据时,会对页加上IU锁,然后在继续查看页中的记录时,会先对记录加上U锁,假设发现这条记录,不是须要更新的,那么会马上释放U锁,假设发现这条记录就是要更新的,那么就会加上X锁,然后update这条记录,然后查看下一条记录。

2、当採用索引来查找数据时,会索引详细的记录,所以会有这些锁:

A、数据库S锁

B、索引中page的IU锁

C、索引中page中的key的U锁,也就是不希望别的会话来改动这条记录的key字段,比方如今有2个会话,1个要改动第10条记录的name字段,还有一个是要改动第10条记录的key字段,显然,在一个会话改动同一条记录的name字段时,肯定会堵塞住还有一个会话改动key字段。也就是说,对同一条记录的不同字段,肯定是不能同一时候改动的,总是有个先后,否则数据就不一致了。

D、表的IX锁

E、页的IU锁 或者是IX锁,这个差别和上面是一样的,查询时用的是IU锁,当发现这个页内部有须要改动的记录时,会转化为IX锁。

F、RID的X锁

3、对每个使用的索引,会对key加上U锁,对索引key所在的页面会加上IU锁。

因为update也须要先找到记录,然后才干更新,所以,在扫描过程中,对要扫描的记录所在的页,加上IU锁,对页中的记录加上U锁,假设这些记录要改动,那么会升级为X锁,页面会升级为IX锁。假设这个记录不须要更新,那么会释放U锁,假设整个页面都没有要改动的记录,那么也会释放IU锁。

另外,使用到要改动列的索引越多,那么锁也会越多。比方如今要改动name字段的值,而包括name字段的索引有2个,那么在改动name时,也须要锁定这2个索引的页面和key,所以会先改动表中name字段的值,然后再改动涉及到name字段的2个索引的key值,这个改动操作是先删除,然后再插入key值,比方,要update 3条记录,那么最后改动索引时,会申请6个key 的X锁,3个是要删除的,3个是要插入的。

只是须要特别注意的是,update语句和select 语句的差别在于,update语句获取的锁,直到事务结束,才会释放。

对于Insert 语句:

A、数据库S锁

B、表的IX锁

C、页的IX锁,对于要新插入数据的页,也会有一个IX锁。

D、RID,对要新插入的数据,会申请一个X锁。

E、假设表中有多个索引,那么每一个索引上都要插入一条新的数据,要插入数据所在页上,会有一个IX锁。

F、要插入索引中的key,也会有一个X锁。

注意:IS、IU(临时没发如今表级别上有这个锁)、IX这3个意向锁,都是在表级别、页级别的,而S、U(临时没没发如今表级别有这个锁)、X 能够在多个级别上。

SQL Server中DML语句要申请的锁的更多相关文章

  1. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  2. SQL server中获取语句执行时间

    在写代码的时候,有时候实现一个功能会有好多个方法,有时候会做一下方法的耗时对比,综合下时间复杂度与空间复杂度,写出最好的代码: 同样,在写一些SQL查询,SQL代码的时候,也希望能写出一个高效一点的查 ...

  3. SQL Server中Delete语句表名不能用别名

    delete from TABLEA A where A.FIELD1=10        (ORACLE适用)delete TABLEA from TABLEA A where A.FIELD1=1 ...

  4. sql server中的go

    1. 作用:向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.2. 语法:一批 Transact-SQL 语句GO如Select 1Select 2Select 3 ...

  5. Sql Server中的事务隔离级别

    数据库中的事物有ACID(原子性,一致性,隔离性,持久性)四个特性.其中隔离性是用来处理并发执行的事务之间的数据访问控制.SqlServer中提供了几种不同级别的隔离类型. 概念 Read UnCom ...

  6. SQL Server中常用的SQL语句(转):

    SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...

  7. SQL Server中常用的SQL语句

    1.概述 名词 笛卡尔积.主键.外键 数据完整性 实体完整性:主属性不能为空值,例如选课表中学号和课程号不能为空 参照完整性:表中的外键取值为空或参照表中的主键 用户定义完整性:取值范围或非空限制,例 ...

  8. 在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML

    在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML 格雷戈里·拉森(Gregory Larsen),2017/08/02(第一次出版:2011 /11/09) 原文链接:http ...

  9. SQL Server中一些有用的日期sql语句

    SQL Server中一些有用的日期sql语句 1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 SELECT DA ...

随机推荐

  1. linux编程获取本机网络相关参数

    getifaddrs()和struct ifaddrs的使用,获取本机IP 博客分类: Linux C编程   ifaddrs结构体定义如下: struct ifaddrs { struct ifad ...

  2. IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)

    需求很简单,是从一段文本中匹配出其中的超链接.基本的做法就是用正则表达式去匹配.但是有这样一个问题. 网上大部分的识别URL的正则表达式url末尾有空格的情况下可以正确识别.比如这样的情况. 我是一段 ...

  3. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  4. bzoj 1109 [POI2007]堆积木Klo(LIS)

    [题意] n个数的序列,删除一个数后序列左移,求最后满足i==a[i]的最大个数. [思路] 设最终得到a[i]==i的序列为s,则s应满足: i<j,a[i]<a[j],i-a[i]&l ...

  5. commons-lang3-3.4.jar

    StringUtils 1.StringUtils.isBlank(str); 检查字符串是否为空白(“ ”),为空(“”),为null. * StringUtils.isBlank(null)    ...

  6. Codeforces 372

    A (被装的袋鼠不可以装的袋鼠)贪心,排序,从n/2分成两部分. B 好一道前缀和的题目. C 标准算法不难想,m^2的算法见http://codeforces.com/blog/entry/9907 ...

  7. 并行开发——Parallel的使用 -摘自网络

    随着多核时代的到来,并行开发越来越展示出它的强大威力,像我们这样的码农再也不用过多的关注底层线程的实现和手工控制, 要了解并行开发,需要先了解下两个概念:“硬件线程”和“软件线程”. 1. 硬件线程 ...

  8. APACHE如何里一个站点绑定多个域名?用ServerAlias

    APACHE2如何里一个站点绑定多个域名?用ServerAlias以前很笨,要使多个域名指向同一站点总是这样写: <VirtualHost *:80>ServerAdmin i@kuigg ...

  9. 第二百五十天 how can I 坚持

    html排版,好烦心. 我以为我会哭,但是我没有.---<领悟> 确实是搞不懂自己,到底想要什么?弟弟最近也不知道咋的了,感觉有点不对劲呢. 最近雾霾好严重,希望我们的后代不会知道雾霾是什 ...

  10. 查杀oracle锁表

    ()锁表查询的代码有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; ()查看哪个表被锁 sele ...