我需要更新一些具有不同值的条目,并在每次更新时进行1次查询。
在此之前,我会检查每个初始值,以确保可以更新条目。
我甚至不确定会发生这种情况,但我希望避免在我进行检查后通过其他查询更改这些条目。
这是我想要避免的一个例子
1)query1检查初始值
2)query2检查初始值
3)query1应用更新
4)query2应用更新
我听说隔离级别,但无法弄清楚如何使用它来避免这个问题,你能帮帮我吗?
提前感谢您的帮助
答案 0 :(得分:1)
我想知道为什么你不仅仅使用原子UPDATE来对WHERE部分进行必要的检查,然后再进行更新呢?
无论如何,如果你需要使用Select然后更新: 我将你推荐给非常好的文章:http://samsaffron.com/blog/archive/2007/04/04/14.aspx
交易是必要的,以避免脏读等。但另一件你应该注意的是DEADLOCK。在分布式方法中,如果您不使用UPDLOCK(锁定资源以进行进一步更新),您可以更新您阅读的不同数据。
答案 1 :(得分:0)
使用交易。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
--check stuff
--update stuff
COMMIT TRANSACTION;
REPEATABLE READ将确保您读取的所有内容(选择)保持不变,直到您的代码到达提交事务。没有人可以更改您已阅读的记录。 有关交易和隔离级别的更多信息,请访问:SET TRANSACTION ISOLATION LEVEL