【问题标题】:DB2, ORACLE and SQL Server. UPDATE with SUBSELECT FOR UPDATE, avoid deadlocksDB2、ORACLE 和 SQL Server。使用 SUBSELECT FOR UPDATE 进行更新,避免死锁
【发布时间】:2015-06-21 15:28:21
【问题描述】:

我有一个工具,您可以将它与 DB2、Oracle 和 MySQL 一起使用。现在我有很多死锁 (SQL Server),我想避免这种情况。我有以下 SQL 更新查询

UPDATE [TABA] 
SET FIELDA = 0  
WHERE FIELDB = ? AND FIELDC = ?;

而这个 SQL 更新查询导致了死锁。我想将其更改为 SUBSELECT_FOR_UPDATE 例如

UPDATE [TABA] 
SET FIELDA = 0  
WHERE FIELDB IN (SELECT FIELDB 
                 FROM [TABA] WHERE FIELDE = 600 AND FIELDG = 5885328 FOR UPDATE);

我不知道如何在 SUBSELECT(DB2、ORacle 和 SQL Server)中使用 FOR UPDATE。

【问题讨论】:

  • 表总是相同的“TABA”,为什么需要子选择和“FOR UPDATE”?如果是 Oracle,只需使用第一个查询。

标签: sql-server database oracle db2


【解决方案1】:

对于我知道的 SQL Server

UPDATE [TABA] 
SET FIELDA = 0 
WHERE FIELDB IN (SELECT FIELDB 
                 FROM [TABA] with (updlock) where FIELDE = 600 AND FIELDG = 5885328);

缺少 DB2 和 Oracle

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 2017-10-18
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2019-01-14
    • 2018-09-11
    相关资源
    最近更新 更多