SQLServer数据库的锁

手工制定锁:

NOLOCK           
不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅应用于SELECT语句。可以读取其它锁定的资源。

 

HOLDLOCK         
将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。HOLDLOCK等同于SERIALIZABLE。       

UPDLOCK         
读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。       

XLOCK          
使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。可以使用PAGLOCK或TABLOCK指定该锁,这种情况下排它锁适用于适当级别的粒度。
     
READPAST       
跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。READPAST锁提示仅适用于运行在READ COMMITTED 隔离级别的事务,并且只在行级锁之后读取。仅适用于SELECT语句。       

 

--以上改变事务的隔离级别

 

事务隔离级别:

READ UNCOMMITTED
等同于NOLOCK。   

   

READ COMMITTED  
用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server2000在此隔离级别上操作。

REPEATABLE READ   
用与运行在可重复读隔离级别的事务相同的锁语义执行扫描。      


SERIALIZABLE     
用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于HOLDLOCK。     

锁的粒度:

ROWLOCK          
使用行级锁,而不使用粒度更粗的页级锁和表级锁。 

    

PAGLOCK         
在通常使用单个表锁的地方采用页锁。  
 
TABLOCK          
使用表锁代替粒度更细的行级锁或页级锁。在语句结束前,SQL Server一直持有该锁。但是,如果同时指定HOLDLOCK,那么在事务结束之前,锁将被一直持有。       

TABLOCKX        
使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。    

 

可以通过手动制定锁的级别+锁的粒度来控制。

转载于:https://www.cnblogs.com/sumflower/archive/2012/03/13/2393415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值