【发布时间】:2011-02-07 13:59:11
【问题描述】:
我见过一些类似的问题,但没有一个能完全解决这种情况。
我有一个在线评估应用程序,它向用户提出问题,每页一个问题,并记录他们的答案。用户可以在问题之间导航,他们的回答会自动保存。
当从一个页面(问题 Q1)导航到另一个页面(问题 Q2)时,数据库必须:
- 更新此用户对 Q1 的响应(如果存在)或插入对 Q1 的响应。
- 选择此用户对 Q2 的响应(如果存在)以填充页面。
[RESPONSE] 表是许多用户同时读写的争论点。但是,每个用户只会读取和写入他们自己的行。
这让我认为我可以安全地使用 (READUNCOMMITTED)、 和 UPDATE with (NOLOCK)。我担心的是,我不希望出现用户前进一个页面,然后跳转回来并在更新之前获取旧数据的情况。我可以将这两个操作放在一个事务中,但如果我使用 NOLOCK 提示,会有什么不同吗?
我可以使用什么锁定策略来缓解此表的争用?
我们目前使用的是 SQL2000。
【问题讨论】:
-
是否设置了站点的安全性以防止同一用户同时登录?如果不是,您可能会遇到锁定提示问题...
-
“使用 (NOLOCK) 更新”是什么意思?更新将始终锁定。
NOLOCK仅适用于SELECT查询。 -
@JNK:是的,同一个用户ID只会登录一次。
-
@Martin:感谢您的提醒。我一直让 SQL Server 做它的事情。
标签: sql transactions locking sql-server-2000