工作过程中遇到的多线程下mysql死锁

 

UPDATE tableA
JOIN (SELECT vala a, valb b, valc c, vald d from tableB) x ON tableA.a = x.a
SET
 tableA.b = x.b,
 tableA.c = x.c,
 tableA.d = x.d;

此语句执行时如果tableB正在被update(或者insert),则死锁。解决方案,先select,拿到结果后再update,将两个过程解耦。

INSERT INTO tableA (a, b, c, d)
(
SELECT
    tableB.a,
    tableB.b,
    tableC.c,
    tableC.d
FROM
    tableB,
    tableC
WHERE
    tableB.e = tableC.e
AND tableB.e = someValue
)

;
此语句执行时如果tableB或者tableC正在被insert(或update),则死锁,解决方案,先select,然后再进行insert,将两个过程解耦。

posted @ 2021-05-17 09:54  陈月亮  阅读(12)  评论(0编辑  收藏  举报