我对以下声明有些疑问,有没有人有任何想法?
任何评论都表示赞赏!!
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)
id
和tableTx
的{p> tableTxInfo
相同(它用作INTEGER PRIMARY KEY
)
对于新交易,将为tableTx
和tableTxInfo
创建具有相同ID的新记录。
我有大约40000条记录messageId = "john-to-bob"
。
当我尝试从两个不同的线程执行上述SQL语句时,一个挂起很长时间而另一个线程只得到响应:
事务检测到死锁,事务被回滚。
我不太熟悉SQL和数据库概念。有没有办法防止出现这种错误?
我的数据库是IBM soliddb
答案 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;
这可能会阻止两个查询之间的循环依赖。
祝你好运!