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