乐观锁定还是悲观锁定?

时间:2014-09-24 07:15:56

标签: database locking

在我的应用程序中,每当我更新数据库中的记录时,我都会使用如下查询: udapte set ... from mytable where status ='normal';

mytable中有一个名为status的字段,如果插入/删除记录,它将采用normal / cancel作为值。

现在当我同时在mytable上进行查询时,它工作正常,正在处理并发(三个人远程访问)。但现在我想知道它是哪种类型的锁? 乐观或悲观或两者都没有。

通过http://en.wikipedia.org/wiki/Optimistic_concurrency_control增加了我已经拥有的疑虑,因为我没有注册时间戳!

1 个答案:

答案 0 :(得分:0)

在您的方案中,不会处理并发性。 User1可以覆盖User2的数据,而无需查看或了解User2的更新。

乐观锁定是您在记录上使用类似RowVersion之类的构造的地方。会发生什么是User1获取记录和RowVersion,然后User2在稍后获取记录。 User1更新记录和RowVersion增量以表示2. User2尝试更新记录但不能,因为他/她的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.