使用此SQL语句检测到死锁?

时间:2013-02-23 09:12:19

标签: sql database ibm-soliddb

我对以下声明有些疑问,有没有人有任何想法?

任何评论都表示赞赏!!

UPDATE tableTx 
SET tableTx.ResultCode = 0 
WHERE tableTx.id in (SELECT tableTxInfo.id 
                     FROM tableTxInfo 
                     WHERE tableTxInfo.messageId = 'john-to-bob' 
                     and tableTx.ResultCode != 1)
idtableTx的{​​p> tableTxInfo相同(它用作INTEGER PRIMARY KEY) 对于新交易,将为tableTxtableTxInfo创建具有相同ID的新记录。

我有大约40000条记录messageId = "john-to-bob"

当我尝试从两个不同的线程执行上述SQL语句时,一个挂起很长时间而另一个线程只得到响应:

  

事务检测到死锁,事务被回滚。

我不太熟悉SQL和数据库概念。有没有办法防止出现这种错误?

我的数据库是IBM soliddb

1 个答案:

答案 0 :(得分:2)

你可以这样试试:

UPDATE tableTx 
SET tableTx.ResultCode = 0 
WHERE tableTx.id in (SELECT tableTxInfo.id 
                     FROM tableTxInfo 
                     WHERE tableTxInfo.messageId = 'john-to-bob') 
      AND tableTx.ResultCode != 1;

这可能会阻止两个查询之间的循环依赖。

祝你好运!