我知道这可能是一个不寻常的行为,以防止被读取,但它在这种情况下是相关的。对于SQL Server 2005中的行级锁定,如何锁定一行以进行读写操作?谢谢!在SQL Server 2005中,如何针对读写操作锁定特定行?
0
A
回答
2
简而言之,它是无法完成的。
您可以做一个“最佳镜头”努力,以防止使用页面锁定对行进行读取(代价是对并发造成严重的负面影响)。
SELECT ... WITH (PAGLOK,XLOCK)
如果您可以在页面上获得独占锁定,则可以有效阻止从其他会话中读取该页面。但是注意:即使在聚簇索引的页面上获得了排它锁,读者也不会被阻止从非聚簇索引中读取行值。所以你还没有真正阻止所有的阅读。
独占行锁(而不是表或页锁)对于阻止读者基本上是无用的,因为会话和查询可以很容易地绕过独占行锁。 (Sessions可以解决事务隔离级别的解决方法,并且查询可以使用WITH (NOLOCK)
提示来解决这些问题。)
SQL Server锁定是一个相当复杂的主题,我不打算试图深入此处。
真正的问题(RThomas在他的评论中强调)是在弄清楚为什么需要防止读取一行。不管是什么原因,很可能会发现获取独占行(或页)锁定不是您正在尝试解决的问题的最佳(或正确)解决方案。
相关问题
- 1. 交易锁定SQL Server 2005
- 2. 如何为读取操作 - 写入操作设置锁定?
- 3. 在SQL Server上读取锁定行?
- 4. 在SQL 2005-2008中锁定行
- 5. SQL Server行锁定
- 6. SQL Server 2005和SELECT和UPDATE锁定
- 7. 如何在SQL Server 2005中定义ENUM?
- 8. 如何在读写操作之间锁定表
- 9. 如何在SQL Server 2005中读取xml?
- 10. 建议在SQL Server 2005中对CURSOR操作进行一些替代操作
- 11. 在SQL Server中锁定
- 12. 在SQL Server中锁定表
- 13. 在表中锁定一行SQL Server
- 14. SQL Server锁定
- 15. Zend针对特定操作的布局
- 16. 如何锁定一组操作对象?
- 17. 如何从SQL Server 2005存储过程中的特定路径读取图像?
- 18. SQL Server 2005的默认锁定 - 行级或页级
- 19. 如何忽略SQL Server 2005中特定列的noiseXXX.txt文件?
- 20. sql server 2005中的字符串操作
- 21. SQL Server 2005在没有锁定或锁定进程的情况下被阻塞
- 22. 查找对应于sql server 2005中特定列的列标签
- 23. sql server中的读写器死锁
- 24. 如何锁定SQL Server中的表
- 25. 如何在sql server 2005中编写sql server数据库图表?
- 26. C#中的读写操作锁定文件
- 27. SQL Server 2005:事务死锁
- 28. SQL server 2005死锁情况
- 29. ObjectiveC在读取发生时锁定写入操作
- 30. SQL Server锁定表
您是否关心数据一致性或数据安全?您所问的内容有点不寻常 - 因此了解您的真实意图可能会让您“更好你可以通过实现这种类型的锁提供更多关于你想要避免(或实现)的信息: – RThomas 2012-07-18 23:22:31
@marc_s:如果它是真的,那将是很好的;但它不完全是真的(阻止写入,是的;阻塞读取,否)。其他会话可以轻松解决独占行锁和r ead行值。 – spencer7593 2012-07-19 19:10:34
@marc_s - 即使在'readcommitted'上,行上的一个'X'锁也不一定阻止读者。见[缺少共享锁的情况](http://sqlblog.com/blogs/paul_white/archive/2010/11/01/read-committed-shared-locks-and-rollbacks.aspx) – 2012-07-19 19:11:28