我非常困惑。在Sql Server更新命令中丢失更新异常
我在READCOMMITTED隔离级别的事务。别的不说,我也更新它的计数器值,类似下面:
Update tblCount set counter = counter + 1
我的应用程序是一个桌面应用程序,本次交易发生非常频繁地同时发生。我们最近注意到一个错误,有时计数器值不会被更新或错过。我们还在每个计数器更新中插入一条记录,以确保记录已插入,但计数器无法更新。这在2000年发生的一次是虚拟交易。
我认真地怀疑这是一个我正面临的丢失更新异常,但是如果你看看上面的命令,它只是从它自己的值更新计数器:如果我已经开始一个事务并且事务已经达到了这个语句,应该锁定该行。这不应该导致丢失的更新,但它以某种方式发生。
是何物,在两个部分此更新命令的工作?像首先它读取计数器值(在此期间它不会获得排他锁),然后写入新的计算值(当它获得排他锁时)?
请帮帮忙,我有真的很困惑。
你是否在交易中运行它本身?如果它不在事务中,则不会锁定任何内容,尽管您希望读取哪些数据。 – 2010-01-27 13:16:49
没有WHERE子句? 2000个事务都试图更新同一行,这是不会扩展的。 – 2010-01-27 16:53:23
是的,这是在隔离级别为ReadCommitted的.NET事务中,是的它在查询中有一个where子句,如下所示: 更新tblCount set counter = counter + 1其中counterID = 10 – Javed 2010-01-27 19:11:10