在我的应用程序中,多个用户可以读取或修改相同的表。但是,当用户修改了一行时,其他行不再能够使用它。
我正在使用 ISOLATION LEVEL READ UNCOMMITED 的交易。问题是,当用户更新表中的行而另一个用户尝试更新同一行时 - 第二个事务将等待第一个事务到 ROLLBACK / COMMIT ,然后才能更新行。
我想要做的是在这种情况下为第二个用户 - 引发错误,这样他就不必等待这么长时间。
我该怎么做?
问题是交易非常庞大(包括几个程序),因此可能会因为锁定而在一段时间内阻止某些用户。
谢谢
答案 0 :(得分:0)
当第二个用户从他自己的交易中尝试查询时,您可以使用NOWAIT
提示:
用户一
BEGIN TRAN
SELECT *
FROM someTable
WHERE blah
用户二
(first user's transaction still open)
BEGIN TRAN
SELECT *
FROM someTable WITH(NOWAIT)
WHERE blah
我记得在某处看过,只有Oracle和Postgres支持快速锁定获取失败。如果是这样,那么上面的提示可能会被忽略。