J'ai besoin de mettre à jour deux tables dans une seule transaction. Les requêtes individuelles ressemblent à ceci:Comment mettre à jour une table dépendante dans la même transaction MySQL?
1. INSERT INTO t1 (col1, col2)
VALUES (val1, val2)
ON DUPLICATE KEY
UPDATE col2 = val2;
Si la requête ci-dessus provoque un insert alors je dois exécuter l'instruction suivante sur la deuxième table:
2. INSERT INTO t2 (col1, col2)
VALUES (val1, val2)
ON DUPLICATE KEY
UPDATE col2 = col2 + val2;
autrement,
3. UPDATE t2
SET col2 = col2 - old_val2 + val2
WHERE col1 = val1;
-- old_val2 is the value of
t1.col2 before it was updated
En ce moment, je lance d'abord un SELECT sur t1, pour déterminer si l'instruction 1 provoquera une insertion ou une mise à jour sur t1. Ensuite, je cours l'instruction 1 et l'un ou l'autre de 2 et 3 dans une transaction. Quelles sont les façons dont je peux faire tout cela dans une même transaction?
L'approche que je pensais est la suivante:
UPDATE t2, t1
set t2.col2 = t2.col2 - t1.col2
WHERE t1.col1 = t2.col2
and t1.col1 = val1;
INSERT INTO t1 (col1, col2)
VALUES (val1, val2)
ON DUPLICATE KEY
UPDATE col2 = val2;
INSERT INTO t2, t1 (t2.col1, t2.col2)
VALUES (t1.col1, t1.col2)
ON DUPLICATE KEY
UPDATE t2.col2 = t2.col2 + t1.col2
WHERE t1.col1 = t2.col2
and t1.col1 = val1;
Malheureusement, il n'y a pas INSERT multi-table ... Duplicate KEY UPDATE dans MySQL 5.0. Que pouvais-je faire d'autre?
Eh bien, je dois tout de même faire un SELECT pour obtenir old_val2 dans la déclaration # 3. –