MySQL, atualize várias tabelas com uma consulta

Eu tenho uma function que atualiza três tabelas, mas eu uso três consultas para executar isso. Desejo usar uma abordagem mais conveniente para boas práticas.

Como posso atualizar várias tabelas no MySQL com uma única consulta?

Você poderia fazer isso com um procedimento armazenado combinando as UPDATE em uma única transação.

Tomemos o caso de duas tabelas, Books e Orders . No caso, aumentamos o número de livros em uma ordem específica com Order.ID = 1002 na tabela Orders Então, também precisamos reduzir o número total de livros disponíveis em nosso estoque pelo mesmo número na tabela 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'; 

Para ver o que isso vai atualizar, você pode converter isso em uma instrução select, por exemplo:

 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'; 

Você também pode fazer isso com uma consulta usando uma união assim:

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

E então, basta enviar essa consulta, é claro. Você pode ler mais sobre joins aqui: http://dev.mysql.com/doc/refman/5.0/en/join.html . Há também algumas restrições para encomendar e limitar as várias atualizações de tabelas que você pode ler aqui: http://dev.mysql.com/doc/refman/5.0/en/update.html (apenas ctrl + f “join”).

Quando você diz várias consultas, você quer dizer várias instruções SQL como em:

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

Ou várias chamadas de function de consulta como em:

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

O primeiro pode ser feito usando uma única chamada mySqlQuery, se é isso que você deseja alcançar, simplesmente chame a function mySqlQuery da seguinte maneira:

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

Isso executará todas as três consultas com uma chamada mySqlQuery ().

Geralmente, são usados ​​os stored procedures para: implementar várias instruções SQL em uma sequência. Usando rollbacks, você pode garantir que eles sejam tratados como uma unidade de trabalho, ou seja, todos eles são executados ou nenhum deles, para manter os dados consistentes.