0

我需要更新一些具有不同值的条目,并在每次更新时进行 1 次查询。

在此之前,我会检查每个初始值以确保可以更新条目。

我什至不确定这是否会发生,但我想避免在我进行检查后让这些条目被另一个查询更改。

这是我要避免的示例

1) query1 检查初始值

2) query2 检查初始值

3) query1 应用更新

4) query2 应用更新

我听说过隔离级别,但不知道如何使用它来避免问题,你能帮我吗?

预先感谢您的帮助

4

2 回答 2

1

我想知道为什么您不只是使用原子更新在 WHERE 部分进行必要的检查,然后为此进行更新?

无论如何,如果您需要使用 Select 然后更新:我将您推荐给非常好的文章:http ://samsaffron.com/blog/archive/2007/04/04/14.aspx

事务对于避免脏读等是必要的。但是您应该注意的另一件事是死锁。在分布式方法中,如果您不使用 UPDLOCK(锁定资源以进行进一步更新),您可以更新您读取的不同数据。

于 2013-04-16T19:23:10.320 回答
0

使用事务。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;

--check stuff

--update stuff

COMMIT TRANSACTION;

REPEATABLE READ 将确保您读取(选择)的所有内容都将保持不变,直到您的代码到达提交事务。没有人可以更改您已阅读的记录。此处有关事务和隔离级别的更多信息:SET TRANSACTION ISOLATION LEVEL

于 2013-04-16T17:52:04.160 回答