次のステートメントに問題があります。誰かわかりませんか??
どんなコメントでも大歓迎です!!
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
とtableTxInfo
は同じです ( として使用されますINTEGER PRIMARY KEY
) 新しいトランザクションの場合、 と の両方に対してtableTx
同じtableTxInfo
ID を持つ新しいレコードが作成されます。
で約40000件のレコードがありmessageId = "john-to-bob"
ます。
2 つの異なるスレッドから上記の SQL ステートメントを実行しようとすると、1 つのスレッドが長時間ハングし、もう 1 つのスレッドが応答を受け取るだけです。
トランザクションがデッドロックを検出しました。トランザクションはロールバックされました。
私は SQL とデータベースの概念にあまり詳しくありません。この種のエラーを防ぐ方法はありますか?
私のデータベースは IBM soliddb です