我正在尝试解决DB2问题。当两个事务并行运行select时,我根据之前的Select进行更新并偶尔遇到Deadlocks,之后没有一个能够更新。
所以我试图使用Select For Update来解决这个问题,但显然,Select For Update不适用于内连接,这是正确的吗?它有办法吗?
这是我的Select Statement
SELECT s.ID FROM DATA.TABLE_A s
INNER JOIN DATA.TABLE_B n ON s.ID = n.ID
WHERE n.N_ID = ?
AND n.N_TYPE = ?
AND n.PN_ID = ?
AND n.PN_TYPE = ?
AND n.RN_ID = ?
AND s.P_ID = ?
AND s.C_ID = ?
FOR UPDATE
答案 0 :(得分:1)
如果您只更新一个表,则可以尝试使用子选择而不是连接。比如说,如果您将TABLE_A
定位为更新,则可能会有效:
SELECT s.ID FROM DATA.TABLE_A s
WHERE s.ID IN (
SELECT n.ID
FROM DATA.TABLE_B n
WHERE n.N_ID = ?
AND n.N_TYPE = ?
AND n.PN_ID = ?
AND n.PN_TYPE = ?
AND n.RN_ID = ?
)
AND s.P_ID = ?
AND s.C_ID = ?
FOR UPDATE
答案 1 :(得分:1)
您是否尝试过以下操作,表示在您的select语句中指定WITH RS
(读稳定性):
SELECT ....(
............
) FOR UPDATE WITH RS USE AND KEEP UPDATE LOCKS