Eu tenho uma função que atualiza três tabelas, mas uso três consultas para fazer isso. Desejo usar uma abordagem mais conveniente para boas práticas.
Como posso atualizar várias tabelas no MySQL com uma única consulta?
mysql
sql
sql-update
Adamski
fonte
fonte
Respostas:
Veja o caso de duas tabelas
Books
eOrders
. Caso aumentemos o número de livros em uma ordem específicaOrder.ID = 1002
naOrders
tabela, também precisamos reduzir o número total de livros disponíveis em nossas ações pelo mesmo número naBooks
tabela.fonte
Para ver o que isso vai atualizar, você pode converter isso em uma instrução select, por exemplo:
Um exemplo usando as mesmas tabelas da outra resposta:
EDITAR:
Apenas por diversão, vamos adicionar algo um pouco mais interessante.
Digamos que você tenha uma mesa de
books
e uma mesa deauthors
. Vocêbooks
tem umauthor_id
. Porém, quando o banco de dados foi criado originalmente, nenhuma restrição de chave estrangeira foi configurada e, posteriormente, um bug no código front-end fez com que alguns livros fossem adicionados comauthor_id
s inválidos . Como um DBA, você não precisa passar por tudo issobooks
para verificar o queauthor_id
deve ser; portanto, é tomada a decisão de que os capturadores de dados corrigam obooks
ponto para a direitaauthors
. Mas há muitos livros para percorrer cada um e digamos que você saiba que os que têm umauthor_id
que corresponde a um realauthor
estão corretos. São apenas aqueles que não existemauthor_id
s inválidos. Já existe uma interface para os usuários atualizarem os detalhes do livro e os desenvolvedores não querem mudar isso apenas por esse problema. Mas a interface existente fazINNER JOIN authors
isso; portanto, todos os livros com autores inválidos são excluídos.O que você pode fazer é o seguinte: insira um registro de autor falso, como "Autor desconhecido". Atualize
author_id
todos os registros incorretos para apontar para o autor desconhecido. Em seguida, os capturadores de dados podem procurar todos os livros com o autor definido como "Autor desconhecido", procurar o autor correto e corrigi-los.Como você atualiza todos os registros incorretos para apontar para o autor desconhecido? Assim (assumindo que o autor desconhecido
author_id
é 99999):O acima também atualizará
books
que têm umNULL
author_id
para o autor desconhecido. Se você não quer isso, é claro que pode adicionarAND books.author_id IS NOT NULL
.fonte
Você também pode fazer isso com uma consulta usando uma junção da seguinte forma:
E então basta enviar esta consulta, é claro. Você pode ler mais sobre junções aqui: http://dev.mysql.com/doc/refman/5.0/en/join.html . Há também algumas restrições para solicitar e limitar várias atualizações de tabela que você pode ler aqui: http://dev.mysql.com/doc/refman/5.0/en/update.html (apenas ctrl + f "ingressar").
fonte
É para isso que servem os procedimentos armazenados: implementar várias instruções SQL em uma sequência. Usando reversões, você pode garantir que eles sejam tratados como uma unidade de trabalho, ou seja, todos sejam executados ou nenhum deles, para manter os dados consistentes.
fonte
Quando você diz várias consultas, você quer dizer várias instruções SQL como em:
Ou várias chamadas de função de consulta como em:
O primeiro pode ser feito usando uma única chamada mySqlQuery, se é isso que você deseja alcançar, basta chamar a função mySqlQuery da seguinte maneira:
Isso executará todas as três consultas com uma chamada mySqlQuery ().
fonte