我正在创建一个网站(c#/ SQL Server 2008,.net),需要允许更新一些可由用户共享的常见信息。
例如,我有2个用户和一个包含许多项目的表。就像一个审核队列。
假设它包含ID为#1,#2,#3
的行如果用户1首先选择#1,则需要立即锁定,直到它被释放/可用。
我有几个问题,因为这对我来说是一个未知领域。
提前致谢。
答案 0 :(得分:0)
你有一些叫做乐观锁定的东西。但是,它并没有解决你的“报告”行被锁定的问题。对于大多数情况,报告是无用的,但它可以以编程方式解决。
如果您正在制作桌面应用程序或网络应用程序,那么锁定有点'有趣',但主要是通过使用额外列(时间戳)并在一段时间内锁定行来解决。
我创建了一个项目,我报告用户一行已被锁定,我用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那里得到了这个想法,所以它不是什么革命性的