工作过程中遇到的多线程下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,将两个过程解耦。

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

上一篇:二叉查找树(三)之 Java的实现


下一篇:C++之 extern C的作用详解