博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server中DML语句要申请的锁
阅读量:6975 次
发布时间:2019-06-27

本文共 1555 字,大约阅读时间需要 5 分钟。

对于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 能够在多个级别上。

转载地址:http://qbesl.baihongyu.com/

你可能感兴趣的文章
MariaDB三之DDL,DML的应用
查看>>
GNS3模拟ASA842
查看>>
使用PowerShell配置Hyper-v Server重复数据删除
查看>>
javascript测试
查看>>
Java线程池
查看>>
解决方案:如何让ADC产品将HTTP请求负载的更加均衡
查看>>
开始运行你的第一个Java Web 项目
查看>>
PHP学习:$_GET,$_POST,$_REQUEST和$_SERVER的一些用法,以及parse_str方法
查看>>
java下DES加密与解密
查看>>
Nagios使用SendEmail发送邮件
查看>>
Domino8.5.1和Exchange2010共用一个邮件域实现邮件收发
查看>>
截图留存
查看>>
linux PDF转换为SWF
查看>>
ASP.net 中的AJAX学习记录之四 updateProgress控件的简单用法
查看>>
怎样自动生成makefile
查看>>
Windows2008R2 AD降级错误解决方案
查看>>
datagridview的数据库设计与使用
查看>>
资源管理器的学习笔记一
查看>>
JAVA中写时复制(Copy-On-Write)Map实现
查看>>
推荐12个漂亮的 CSS3 按钮实现方案
查看>>