手工制定锁:
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?????? ? 使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。????
?
可以通过手动制定锁的级别+锁的粒度来控制。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|