我有以下情况需要处理:
值表:
id int
val varchar(20)
used bit
flag int
我想找到第一行 WHEREused = 0 AND flag IS NULL 并在“flag”中粘贴一些内容。一旦完成,任何其他用户将无法使用该行(因为标志不为空)
这当然很简单:
UPDATE top (1) mytable
SET flag = someUniqueValue
WHERE used = 0
AND flag IS NULL
我想知道如果两个用户同时运行相同的更新会发生什么。显然有人会第一个到达那里。
我不知道如何测试这个场景,所以我自己也找不到答案。
第二个用户是否会覆盖第一个用户? (立即还是释放锁后?)
第二个用户是否被锁定并出现错误? (如果是这样,我该如何检测错误?)
如有任何帮助,我们将不胜感激。
最佳答案
第二个用户将覆盖第一个用户。除非包含在交易中,否则它不会被锁定。 检查这个link ....
关于sql-server-2008 - SQL Server中如何处理更新同一行的两个事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686671/