1

我对以下陈述有一些问题,有人知道吗?

任何意见表示赞赏!

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)

idoftableTx和相同(tableTxInfo用作INTEGER PRIMARY KEY_tableTxtableTxInfo

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

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

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

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

我的数据库是 IBM soliddb

4

1 回答 1

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;

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

祝你好运!

于 2013-02-23T09:26:21.890 回答