使用表级锁定提示.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在 SELECT、INSERT、UPDATE 和 DELETE 语句中指定表级锁定提示的关键字如表7.2所示。 表7.2 锁定提示关键字说明 锁定提示 描述 SERIALIZABLE (HOLDLOCK) 将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。用于运行在可串行读隔离级别的事务。 HOLDLOCK 等同于 SERIALIZABLE。 NOLOCK (READUNCOMMITTED) 不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅应用于 SELECT 语句。 READ UNCOMMITTED等同于NOLOCK。 PAGLOCK 在通常使用单个表锁的地方采用页锁。 READ COMMITTED 用于运行在提交读隔离级别的事务相同的锁语义中。默认情况下,SQL Server 2000 在此隔离级别上操作。 READPAST 跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。 READPAST 锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于 SELECT 语句。 REPEATABLEREAD 用于运行在可重复读隔离级别的事务相同的锁语义。 ROWLOCK 使用行级锁,而不使用粒度更粗的页级锁或表级锁。 TABLOCK 使用表锁代替粒度更细的行级锁或页级锁。 在语句结束前,SQL Server 一直持有该锁。但是如果同时指定 HOLDLOCK,那么在事务结束之前,锁将被一直持有。 TABLOCKX 使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。 UPDLOCK 读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。 UPDLOCK 的优点是允许读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。 XLOCK 使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。可以使用 PAGLOCK 或 TABLOCK 指定该锁,这种情况下排它锁适用于适当级别的粒度。 表7.3实验数据Xy1 表7.3实验数据 X y 1 1 2 2 3 3 4 4 5 5 USE teachdb GO SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO BEGIN TRANSACTION SELECT s_name FROM student WITH (NOLOCK) GO 注意:NOLOCK、READUNCOMMITTED和READPAST不能用于将进行插入、删除或更新的表。 在Lock数据库的表T中输入5条记录,其值如表7.3所示。参照【例7.2】设置环境,然后进行以下操作: 以zli用户名打开一查询分析器窗口,运行图7-8所示的程序(事务未结束)。 图7-8 更新表T第3、4行数据 图7-9 使用READPAST锁提示 再以sa帐号打开另一查询分析器窗口,输入如图7-9中所示的查询语句,运行后得到图中所示的结果。 由图7-9可见,在查询语句中使用了READPAST 锁提示后,跳过了锁定行,显示所有未受更新操作影响的行。 如果在图7-9的查询语句中不加READPAST 锁提示,如图7-10所示。则因为前一个更新数据的事务没有结束,将阻塞此查询事务,使其等待前一事务释放在这些行上的锁。此时的查询语句处于阻塞状态(见图7-10中按钮标记,单击该按钮可以取消查询操作)。 图7-10 不使用READPAST锁提示被阻塞 通过本例可知,READPAST选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是被阻塞,等待前一事务的结束。 READPAST 锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于 SELECT 语句。

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档