我有一些問題,下面的語句,有沒有人有任何想法?使用此SQL語句檢測到死鎖?
任何意見的讚賞!
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)
的tableTx
和tableTxInfo
id
是相同的(它用作INTEGER PRIMARY KEY
) 對於一個新的事務,一個新的記錄,才能既爲tableTx
和tableTxInfo
用相同的ID創建。
我有大約40000條記錄與messageId = "john-to-bob"
。
當我試圖從兩個不同的線程執行上面的SQL語句,一個掛了相當長的時間,另一個線程只是得到的迴應:
事務檢測到死鎖時,事務回滾。
我對SQL和數據庫概念還不是很熟悉。有什麼辦法可以防止這種錯誤?
我的數據庫是IBM solidDB的
你有沒有試過這個40k的子集?可能是因爲腳本認爲腳本處於死鎖狀態需要很長時間。 – PCoelho 2013-02-23 09:15:53
嘗試先在桌子上設置寫鎖定。 – 2013-02-23 09:18:56
感謝您的評論,PCoelho是正確的,操作花了這麼長時間,以便另一個線程超時,並返回該死鎖錯誤。修改SQL語句後問題消失~~ – kai 2013-02-23 14:35:56