sql-server-2008 - SQL Server中如何处理更新同一行的两个事务

标签 sql-server-2008

我有以下情况需要处理:

值表:

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/

相关文章:

sql-server - 更改本地时钟会影响远程 SQL Server 数据库功能

sql-server - 如何查询SQL Server数据库恢复需要多长时间?

sql-server - 在计算列中使用 master.sys.fn_varbintohexsubstring

sql-server-2008 - 由于名称中的点,SSIS 包未导入 SS2008

tsql - 为什么ERROR_MESSAGE()始终为null?

c# - 出于安全原因,如何加密 Sql Server 2008 表?

mysql - 我应该安装32位数据库还是64位数据库?

SQL:替换字符串中的特定字符

sql - 如果在 WHERE 子句中用参数(具有相同值)替换常量,为什么查询会急剧减慢?

使用 group by 进行 SQL Server 更新