在我的应用程序中,每当我更新数据库中的记录时,我都会使用如下查询: udapte set ... from mytable where status ='normal';
mytable中有一个名为status的字段,如果插入/删除记录,它将采用normal / cancel作为值。
现在当我同时在mytable上进行查询时,它工作正常,正在处理并发(三个人远程访问)。但现在我想知道它是哪种类型的锁? 乐观或悲观或两者都没有。
通过http://en.wikipedia.org/wiki/Optimistic_concurrency_control增加了我已经拥有的疑虑,因为我没有注册时间戳!
答案 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.