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,将两个过程解耦。