我有一个多线程java程序,它在我的MySQL数据库上运行更新语句。当我使用线程时,我会遇到死锁,尽管我永远不会在任何两个线程中更新相同的行。对于每次运行此查询,field_a是不同的,为什么我会有锁定问题?
thread1: field_a - 'A'
thread2: field_a - 'B'
thread3: field_a - 'C'
我正在运行这样的查询
UPDATE table as t,
(
SELECT field_a,
field_b,
TRUNCATE(AVG(Sumfield_c), 2) avgfield_c,
TRUNCATE(AVG(Sumfield_d), 2) avgfield_d
FROM
(SELECT field_a,
field_b,
DateString,
sum(field_c) Sumfield_c,
sum(field_d) Sumfield_d
FROM table
WHERE DateString > DATE_FORMAT(SUBDATE(CURDATE(), 22), '%Y%m%d') and field_a = ? and id <= ?
GROUP BY field_a,
field_b,
DateString) A
GROUP BY field_a,
field_b
) as temp
SET t.Avgfield_c = temp.avgfield_c, t.Avgfield_d = temp.avgfield_d WHERE t.field_a = temp.field_a and t.field_b = temp.field_b and t.id > ?;
答案 0 :(得分:0)
经过数小时和数小时后,我通过创建新索引来实现它。
CREATE INDEX newIndex ON table(fieldA,fieldB);
希望这有助于将来使用线程运行类似的查询。