我有以下情况,我想处理:
值表:
id int
val varchar(20)
used bit
flag int
我想找到第一行 WHERE used = 0 AND flag IS NULL 并在'flag'中粘贴一些东西。一旦完成,任何其他用户将无法使用该行(因为标志不为空)
当然,这很简单:
UPDATE top (1) mytable
SET flag = someUniqueValue
WHERE used = 0
AND flag IS NULL
我想知道的是,如果两个用户同时运行相同的 UPDATE 会发生什么。显然,一个人会先到达那里。
我不知道如何去测试这个场景,所以无法找到自己。
第二个用户会覆盖第一个用户吗?(立即或在锁被释放后?)
第二个用户是否被锁定并出现错误?(如果是这样,我该如何检测错误?)
任何帮助,将不胜感激。