Tengo una función que actualiza tres tablas, pero utilizo tres consultas para realizar esto. Deseo utilizar un enfoque más conveniente para las buenas prácticas.
¿Cómo puedo actualizar varias tablas en MySQL con una sola consulta?
mysql
sql
sql-update
Adamski
fuente
fuente
Respuestas:
Tomemos el caso de dos mesas,
Books
yOrders
. En caso de que aumentemos el número de libros en un orden particularOrder.ID = 1002
en laOrders
tabla, entonces también debemos reducir el número total de libros disponibles en nuestro inventario por el mismo número en laBooks
tabla.fuente
Para ver qué va a actualizar esto, puede convertirlo en una instrucción select, por ejemplo:
Un ejemplo que usa las mismas tablas que la otra respuesta:
EDITAR:
Solo por diversión, agreguemos algo un poco más interesante.
Digamos que tienes una tabla de
books
y una tabla deauthors
. Tubooks
tienes unauthor_id
. Pero cuando se creó originalmente la base de datos, no se configuraron restricciones de clave externa y más tarde un error en el código front-end provocó que algunos libros se agregaran con correos no válidosauthor_id
. Como administrador de bases de datos , no desea tener que pasar por todo estobooks
para verificar cuálauthor_id
debería ser, por lo que se toma la decisión de que los capturadores de datos arreglen elbooks
punto a la derechaauthors
. Pero hay demasiados libros para revisar cada uno y digamos que sabes que los que tienen una s que no son válidos. Ya hay una interfaz para que los usuarios actualicen los detalles del libro y los desarrolladores no quieren cambiar eso solo por este problema. Pero la interfaz existente hace unauthor_id
que corresponde con un realauthor
son correctos. Son solo los que no existenauthor_id
INNER JOIN authors
, por lo que se excluyen todos los libros con autores no válidos.Lo que puede hacer es esto: inserte un registro de autor falso como "Autor desconocido". Luego actualice el
author_id
de todos los registros incorrectos para señalar al autor Desconocido. Luego, los capturadores de datos pueden buscar todos los libros con el autor establecido en "Autor desconocido", buscar el autor correcto y corregirlo.¿Cómo se actualizan todos los registros incorrectos para señalar al autor desconocido? Así (suponiendo que el autor desconocido
author_id
es 99999):Lo anterior también actualizará
books
que tenga unNULL
author_id
autor desconocido. Si no quieres eso, por supuesto que puedes agregarAND books.author_id IS NOT NULL
.fuente
También puede hacer esto con una consulta usando una combinación como esta:
Y luego simplemente envíe esta consulta, por supuesto. Puede leer más sobre las combinaciones aquí: http://dev.mysql.com/doc/refman/5.0/en/join.html . También hay un par de restricciones para ordenar y limitar las actualizaciones de múltiples tablas que puede leer aquí: http://dev.mysql.com/doc/refman/5.0/en/update.html (solo ctrl + f "unirse").
fuente
Por lo general, para eso están los procedimientos almacenados: para implementar varias instrucciones SQL en una secuencia. Con las reversiones, puede asegurarse de que se traten como una unidad de trabajo, es decir, que se ejecuten todas o ninguna de ellas, para mantener la coherencia de los datos.
fuente
Cuando dice múltiples consultas, quiere decir múltiples sentencias SQL como en:
O múltiples llamadas a funciones de consulta como en:
Todo lo anterior se puede hacer usando una sola llamada mySqlQuery si eso es lo que quería lograr, simplemente llame a la función mySqlQuery de la siguiente manera:
Esto ejecutará las tres consultas con una llamada mySqlQuery ().
fuente