如果我在 MS SQL Server 中选择一行进行更新,并希望将其锁定直到我更新或取消,哪个选项更好:-
1) 使用像 UPDLOCK 这样的查询提示 2) 对事务使用 REPEATABLE READ 隔离级别 3) 任何其他选项。
谢谢,查克。
如果我在 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
HOLDLOCK提示礼貌地要求 SQL Server 保持锁定,直到您提交事务。ROWLOCK提示礼貌地要求 SQL Server 只锁定这一行,而不是发出页或表锁。
请注意,如果有很多行受到影响,SQL Server 将主动升级为页面锁,或者您将拥有一大堆行锁填充服务器的内存并阻碍处理。
两者都不。在用户输入数据时,您几乎不想让事务处于打开状态。如果必须实现这样的悲观锁,人们通常通过滚动自己的功能来实现。
考虑你正在做的事情的全部后果。我曾经在一个像这样实现锁定的系统上工作过。你经常遇到大量陈旧的锁,当你把它强加给他们时,你的用户很快就会感到困惑和愤怒。在我们的案例中,我们的解决方案是完全删除此锁定功能。
请注意,尽管使用 ROWLOCK SQL Server 可能会在认为需要时选择仍采用整页锁定。