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

J’ai une fonction qui met à jour trois tables, mais j’utilise trois requêtes pour effectuer cette opération. Je souhaite utiliser une approche plus pratique pour les bonnes pratiques.

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

Vous pouvez le faire avec une procédure stockée en combinant les instructions UPDATE en une seule transaction.

Prenons le cas de deux tableaux, Books et Orders . Dans le cas où nous Order.ID = 1002 le nombre de livres dans un ordre particulier avec Order.ID = 1002 dans la table Orders , nous devons également réduire le nombre total de livres disponibles dans notre stock par le même nombre dans la table Books .

 UPDATE Books, Orders SET Orders.Quantity=Orders.Quantity+2, Books.InStock=Books.InStock-2 WHERE Books.BookID=Orders.BookID AND Orders.OrderID = 1002; 
 UPDATE t1 INNER JOIN t2 ON t2.t1_id = t1.id INNER JOIN t3 ON t2.t3_id = t3.id SET t1.a = 'something', t2.b = 42, t3.c = t2.c WHERE t1.a = 'blah'; 

Pour voir ce que cela va mettre à jour, vous pouvez le convertir en une instruction select, par exemple:

 SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c FROM t1 INNER JOIN t2 ON t2.t1_id = t1.id INNER JOIN t3 ON t2.t3_id = t3.id WHERE t1.a = 'blah'; 

Vous pouvez aussi le faire avec une requête en utilisant une jointure comme ceci:

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

Et puis envoyez simplement cette requête, bien sûr. Vous pouvez en savoir plus sur les jointures ici: http://dev.mysql.com/doc/refman/5.0/en/join.html . Il y a aussi quelques ressortingctions pour commander et limiter les mises à jour de plusieurs tables que vous pouvez lire ici: http://dev.mysql.com/doc/refman/5.0/en/update.html (ctrl + f “join”).

Lorsque vous parlez de plusieurs requêtes, vous voulez 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 appels de fonction de requête 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;) 

Le premier peut être fait en utilisant un seul appel mySqlQuery si c’est ce que vous vouliez réaliser, appelez simplement la fonction mySqlQuery 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 exécutera les trois requêtes avec un appel mySqlQuery ().

C’est généralement ce que sont les procédures stockées: pour implémenter plusieurs instructions SQL dans une séquence. À l’aide des restaurations, vous pouvez vous assurer qu’elles sont traitées comme une unité de travail, c’est-à-dire qu’elles sont toutes exécutées ou qu’elles ne le sont pas, afin de maintenir la cohérence des données.