mysql-multi-threaded更新(没有线程更新相同的id)但是死锁

42fyovps  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(341)

我有一个多线程java程序,它在mysql数据库上运行update语句。当我使用线程时,会出现死锁,尽管我从未更新任何两个线程中的相同行。每次运行此查询时,字段\u 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 > ?;
wa7juj8i

wa7juj8i1#

经过一个又一个小时,我通过创建一个新索引使它工作起来。
在表(fielda,fieldb)上创建索引newindex;
希望这对将来使用线程运行类似查询的人有所帮助。

相关问题