【发布时间】:2013-02-23 09:12:18
【问题描述】:
我对下面的说法有些问题,有人知道吗?
感谢任何cmets!
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 的一个子集试过这个吗?可能是因为脚本认为它发生了死锁。
-
先尝试在你的表上设置写锁。
-
感谢 cmets,PCoelho 是对的,操作花费了很长时间,以至于另一个线程超时并返回了死锁错误。修改SQL语句后问题消失~~
标签: sql database ibm-soliddb