如果我在MS SQL Server中选择要更新的行,并希望在更新或取消之前将其锁定,则哪个选项更好:-
1)使用类似UPDLOCK的查询提示2)对事务使用可重复的读隔离级别3)任何其他选项。
谢谢,Chak。
发布于 2008-12-22 12:39:36
都不是。当用户输入数据时,您几乎不想让事务保持打开状态。如果你必须像这样实现一个悲观的锁,人们通常会通过滚动自己的功能来实现。
考虑你正在做的事情的全部后果。我曾经在一个系统上工作,它实现了这样的锁定。您经常会遇到大量的陈旧锁,当您将其强加给用户时,他们很快就会感到困惑和愤怒。在我们的案例中,我们的解决方案是完全删除此锁定功能。
发布于 2008-12-22 14:00:47
如果你正在等待另一个资源,比如终端用户,那就采纳Dave Markle的建议,不要去做。
否则,请尝试以下T-SQL代码:
BEGIN TRAN
SELECT *
FROM authors AU
WITH (HOLDLOCK, ROWLOCK)
WHERE AU.au_id = '274-80-9391'
/* Do all your stuff here while the row is locked */
COMMIT TRANSQL 提示礼貌地要求SQL Server在您提交事务之前持有该锁。ROWLOCK提示礼貌地要求SQL Server仅锁定此行,而不是发出页锁或表锁。
请注意,如果有许多行受到影响,SQL Server将主动升级为页锁,或者会有一大堆行锁填满服务器的内存并使处理陷入停滞。
发布于 2008-12-22 14:02:53
只需注意,尽管使用了行锁,但如果SQL Server认为需要,它可能会选择仍然采用全页锁。
https://stackoverflow.com/questions/386162
复制相似问题