我对如何实现悲观锁定感兴趣,具有非常特定的行为。 (我加了标签的问题与Sybase + ORACLE + MSSQL究其原因,是因为我很乐意与解决方案或“那是不可能的!”他们中的任何一个)执行悲观锁定
我想是这样的: 1 - 能够锁定一行(以便进程稍后可以更新,但没有其他进程可以锁定该行) 2 - 当另一个进程尝试锁定相同的行时,它应该会获得记录被锁定的通知 - 我不希望这样进程挂起(我相信这里可以使用简单的超时) 3 - 当另一个进程尝试读取记录时,它应该能够以它当前在数据库中的方式读取它(但我不想使用脏读) 。
以上3个要求目前通过使用共享内存的应用程序解决 - 并执行外部数据库的记录锁定。我想将锁定移入数据库。
到目前为止,我有间#1和#3的冲突 - 如果我通过更新字段相同的值做“更新......”锁记录,不是从另一个进程挂起“选择”。
编辑: 我有与MSSQL快照隔离级别现在一些运气。我可以同时执行锁定和读取而不使用脏读。
我之所以不想用脏读,是,如果报告运行时,它可能会读取多个表,并发出多个查询。快照为我提供了数据库的一致快照。如果读取脏了,我会得到不匹配的数据 - 如果中间有任何更新。
我认为甲骨文也有快照,所以现在我最感兴趣的是Sybase。
你能否更详细地解释为什么你不想用脏读?这就是你在#3中要求的定义。 – mwigdahl 2012-07-30 14:19:04