2

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

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

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

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

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

  • 在 SQL 中锁定这一行的最佳方法是什么?
  • 作为无状态的,如何让用户 2 知道用户 1 声称 #1?使用“下一个可用”方法会更好吗?

提前致谢。

4

1 回答 1

0

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

如果您正在制作桌面应用程序或 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,检查时间,更新是可能的

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

于 2012-11-16T12:25:03.610 回答