gpt4 book ai didi

java - MySQL - 多线程更新(没有线程更新相同的id)但有死锁

转载 作者:行者123 更新时间:2023-11-29 17:34:40 28 4
gpt4 key购买 nike

我有一个多线程 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 > ?;

最佳答案

经过几个小时后,我通过创建一个新索引使其正常工作。

CREATE INDEX newIndex ON 表(字段A,字段B);

希望这可以帮助将来使用线程运行类似查询的人。

关于java - MySQL - 多线程更新(没有线程更新相同的id)但有死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50390918/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com