sqlserver锁和事务隔离级别的比较与使用

sqlserver锁和事务隔离级别的比较与使用

ID:12144326

大小:68.50 KB

页数:3页

时间:2018-07-15

sqlserver锁和事务隔离级别的比较与使用_第1页
sqlserver锁和事务隔离级别的比较与使用_第2页
sqlserver锁和事务隔离级别的比较与使用_第3页
资源描述:

《sqlserver锁和事务隔离级别的比较与使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SQLserver锁和事务隔离级别的比较与使用对象①     锁:每条SQL语句②     隔离:事务锁①并发问题丢失更新未确认的读取(脏读)不一致的分析(非重复读):多次读取相同的数据(行)不一致(其他用户更改update)幻像读:多次读取有不存在和新增的数据(其他用户插入insert或删除delete)隔离级别隔离级别脏读不可重复读取幻像说明未提交读(readuncommitted)是是是如果其他事务更新,不管是否提交,立即执行提交读(readcommitted默认)否是是读取提交过的数据。如果其他事务更新没提交,则等待可重复读(repe

2、atableread)否否是查询期间,不允许其他事务update可串行读(serializable)否否否查询期间,不允许其他事务insert或delete提交读假设存在表A,如下所示A1A2A3112131122232打开查询分析器并打开两个连接,分别输入如下两个事务:--事务ⅠSETTRANSACTIONISOLATIONLEVELREADCommittedbegintranupdateAsetA2=20whereA1=11waitfordelay'00:00:10'rollbacktran--事务ⅡSETTRANSACTIONISOLA

3、TIONLEVELREADCommittedselect*fromAwhereA1=11如果先运行事务Ⅰ,然后紧接着运行事务Ⅱ,则事务Ⅱ要等待10秒钟(一个连接在修改数据块时别的连接也不能查询这个数据块,直到解锁。反之亦然:读的时候不能写和修改)。如果把事务Ⅱ改为如下SETTRANSACTIONISOLATIONLEVELREADUNCommittedselect*fromAwhereA1=11那么事务Ⅱ不需等待,立即执行(可以看出READUNCommitted事务select不对数据发出共享锁)锁:(这里主要讲解共享锁和排他锁两种经常用到的

4、锁)共享锁主要是为了共享读(select),如果存在事务(一个或多个)拥有对表中数据(关于锁数据的多少,视锁的粒度而定)的共享锁,不允许对锁定的数据进行更新(update)(从锁的角度讲,即不允许事务获取排他锁,要等到所有的共享锁都释放掉)。反之,如果事务对数据已经具有排他锁(只能有一个),其他的事务就不能对锁定的数据获取共享锁和排他锁(即排他锁与共享锁不能兼容,更多信息请查看锁兼容性),在此特别强调一下锁定的数据,因为有的资料上讲解到“一个连接写的时候,另一个连接可以写”,实际上写的这种情况是各个连接的读写的数据不是相同的行,也就是说各个连

5、接锁定的数据不同。根据以上分析,我们总结为六个字为“共享读,排他写”。了解了锁的情况之后,又涉及到一个问题。事务究竟要保持锁多久呢?一般来说,共享锁的锁定时间与事务的隔离级别有关,如果隔离级别为ReadCommitted的默认级别,只在读取(select)的期间保持锁定,即在查询出数据以后就释放了锁;如果隔离级别为更高的Repeatableread或Serializable,直到事务结束才释放锁。另说明,如果select语句中指定了HoldLock提示,则也要等到事务结束才释放锁。排他锁直到事务结束才释放。做出了以上分析,现在我们可能会存在这

6、样的疑问,到底在执行SQL语句的时候发出什么样的锁呢,这就由事务的隔离级别决定了。一般情况,读语句(select)发出共享锁,写语句(update,insert,delete)发出排他锁。但是,如果这样不能满足我们的要求怎么办呢,有没有更多选择呢,别急,SQLserver为我们提供了锁定提示的概念。       锁定提示对SQL语句进行特别指定,这个指定将覆盖事务的隔离级别。下面对各个锁定提示分别予以介绍(更多资料请查看SQLserver的联机帮助),笔者做出了以下分类。类型1①     READUNCOMMITTED:不发出锁②     R

7、EADCOMMITTED:发出共享锁,保持到读取结束③     REPEATABLEREAD:发出共享锁,保持到事务结束④     SERIALIZABLE:发出共享锁,保持到事务结束类型2①     NOLOCK:不发出锁。等同于READUNCOMMITTED②     HOLDLOCK:发出共享锁,保持到事务结束。等同于SERIALIZABLE③     XLOCK:发出排他锁,保持到事务结束。④     UPDLOCK:发出更新锁,保持到事务事务结束。(更新锁:不阻塞别的事物,允许别的事物读数据(即更新锁可与共享锁兼容),但他确保自上次

8、读取数据后数据没有被更新)⑤     READPAST:发出共享锁,但跳过锁定行,它不会被阻塞。适用条件:提交读的隔离级别,行级锁,select语句中。类型3①  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。