在更新期间锁定项目的最佳方法



我正在创建一个网站(c#/SQL Server 2008,.net),该网站需要允许更新一些可以由用户共享的常见信息。

例如,我有 2 个用户和一个包含许多项目的表。很像审核队列。

假设它包含 ID 为 #1、#2、#3 的行

如果用户 1 首先选择 #1,则需要立即锁定,直到它被释放/可用。

我有几个问题,因为这对我来说是未知的领域。

  • 在 SQL 中锁定此行的最佳方法是什么?
  • 作为无状态,如何让用户 2 知道用户 1 已声明#1?使用"下一个可用"方法是否更好?

提前谢谢。

你有一个叫做乐观锁定的东西。但是,它并不能解决您"报告"该行被锁定的问题。在大多数情况下,报告是无用的,但可以通过编程方式解决。

锁定有点"有趣",取决于您是制作桌面应用程序还是 Web 应用程序,但大多数情况下,它是通过使用额外的列(时间戳)并锁定一行一段时间来解决的。

做了一个项目,我报告用户一行被锁定,我用 2 个字段(开始时间、结束时间)解决了它,因为我想给更新行的人可变的时间。

样本:

query: select a, b, c, d, start_time, end_time FROM table
Program : if ((datetime.now()-start time > 1min) or (end_time <> null))
{
update table
SET start_time = datetime.now()
set end_time = null
where A = a and B = b and C= c and D = d, and START_TIME = start_time 
--big caps is current value, small caps value from last select ( and that is OPTIMISTIC concurency).
}
else
{
messagebox.show ("You suck, cant be changed") --personal touch :-)
}

更新行时,不要忘记放置end_time。

OFC,检查时间,在更新范围内是可能的

编辑:我从甲骨文row_scn中得到了这个想法,所以这不是什么革命性的东西

相关内容

最新更新