5 sql-server locking transactions pessimistic
如果我在MS SQL Server中选择一行进行更新,并希望将其锁定,直到我更新或取消,哪个选项更好: -
1)使用像UPDLOCK这样的查询提示2)对事务使用REPEATABLE READ隔离级别3)任何其他选项.
谢谢,泽.
如果您正在等待最终用户等其他资源,请接受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 TRAN
Run Code Online (Sandbox Code Playgroud)
该HOLDLOCK提示礼貌询问的SQL Server,直到您提交事务持有的锁.该ROWLOCK提示礼貌地要求的SQL Server只锁定该行,而不是发出页或表锁.
请注意,如果大量行受到影响,SQL Server将主动升级到页锁,或者您将拥有一大堆行锁填充服务器的内存并阻碍处理.
两者都不。您几乎不想在用户输入数据时保持事务打开。如果必须实现这样的悲观锁,人们通常会通过滚动自己的功能来实现。
考虑一下你正在做的事情的全部后果。我曾经开发过一个像这样实现锁定的系统。您经常会遇到大量陈旧的锁,当您将其强加给用户时,他们很快就会感到困惑和愤怒。在我们的案例中,我们的解决方案是完全删除此锁定功能。
| 归档时间: |
|
| 查看次数: |
6814 次 |
| 最近记录: |