155 votes

MySQL, mettre à jour plusieurs tables avec une requête

J'ai une fonction qui met à jour trois tables, mais j'utilise trois requêtes pour effectuer cette. Je souhaite utiliser une approche pratique pour une bonne pratique.

Comment puis-je mettre à jour plusieurs tables dans MySQL avec une seule requête?

483voto

Irfan Points 1091

Prenons le cas de deux tables, Books et Orders. Dans le cas, on augmente le nombre de livres dans un ordre particulier avec Order.ID = 1002 en Orders tableau nous avons aussi besoin de réduire le nombre total de livres disponibles dans notre stock, par le même nombre en Books table.

UPDATE Books, Orders
SET Orders.Quantity=Orders.Quantity+2,
Books.InStock=Books.InStock-2
WHERE Books.BookID=Orders.BookID
 AND Orders.OrderID = 1002;

39voto

Stephen Searles Points 590

Vous pouvez aussi le faire avec une seule requête avec une jointure comme suit:

UPDATE table1,table2 SET table1.col=a,table2.col2=b
WHERE items.id=month.id;

Et puis il suffit d'envoyer cette requête, bien sûr. Vous pouvez en lire plus à propos des jointures ici: http://dev.mysql.com/doc/refman/5.0/en/join.html. Il y a aussi quelques restrictions pour la commande et de la limitation sur les tables multiples mises à jour que vous pouvez lire à ce sujet ici: http://dev.mysql.com/doc/refman/5.0/en/update.html (juste ctrl+f "joindre").

5voto

SteveCav Points 3860

C'est généralement ce que les procédures stockées sont pour: mise en œuvre de plusieurs instructions SQL dans une séquence. L'aide de restaurations, vous pouvez vous assurer qu'ils sont traités comme une seule unité de travail, c'est à dire soit ils sont tous exécutés ou aucun d'entre eux sont, pour garder des données cohérentes.

4voto

code_burgar Points 6845

Quand vous dites plusieurs requêtes voulez-vous dire plusieurs instructions SQL comme dans:

UPDATE table1 SET a=b WHERE c;
UPDATE table2 SET a=b WHERE d;
UPDATE table3 SET a=b WHERE e;

Ou plusieurs requête appels de fonction, comme dans:

mySqlQuery(UPDATE table1 SET a=b WHERE c;)
mySqlQuery(UPDATE table2 SET a=b WHERE d;)
mySqlQuery(UPDATE table3 SET a=b WHERE e;)

L'ancien peut être fait à l'aide d'un seul mySqlQuery appel, si c'est ce que tu voulais faire, il suffit d'appeler la mySqlQuery fonction de la manière suivante:

mySqlQuery(UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;)

Cela permettra d'exécuter tous les trois requêtes avec un mySqlQuery() de l'appel.

-7voto

Freddie Points 960

Vous pouvez le faire avec une procédure stockée par la combinaison de l' UPDATE des déclarations en une seule transaction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X