乐观锁或悲观锁?

问题描述:

在我的应用程序,每当我更新数据库的记录,我使用的查询,如: udapte设置...从MYTABLE 那里状态=“正常”;乐观锁或悲观锁?

有在MYTABLE场称为状态将带正常/如果一个记录被插入/删除的取消作为值。

现在,当我同时做mytable上查询具体而言,它做工精细,并发被处理(含三人远程访问)。但现在我想知道它是哪种类型的锁?乐观的或悲观的或两者都不是。

通过http://en.wikipedia.org/wiki/Optimistic_concurrency_control会已经加入到怀疑我已经有了,因为我不是注册戳!

+0

RDBMS是什么? .______ – usr 2014-09-24 08:55:43

+0

@usr RDBMS是oracle – 2014-09-24 16:00:21

在您的场景中并发性未得到处理。用户1可能会覆盖用户2的数据,而无需查看或了解用户2的更新。

乐观锁是你使用的东西,像构造上备案RowVersion。会发生什么是User1获取记录和RowVersion,然后User2在第二秒后获取记录。用户1更新记录和增量为2,用户2尝试更新记录但不能因为他/她的RowVersion旧。

在零个记录用户1

UPDATE record 
    SET status = 'test', RowVersion = 2 
    WHERE RowVersion = 1; 

用户2

UPDATE record 
    SET status = 'test2', RowVersion = 2 
    WHERE RowVersion = 1; 

此语句结果的影响,因为RowVersion改为2

+0

你不认为我们通过使用'status = normal'来达到同样的效果,这与使用rowversion类似(至少在概念上)。你的意见是什么? – 2015-04-01 06:17:13