Archivos batch – procesamiento por lotes

Categories:

Es posible utilizar MySQL en modo batch o procesamiento por lotes.
El procesamiento por lotes permite ejecutar un conjunto de sentencias almacenadas en un archivo de manera secuencial.
Para utilizarlo tenemos que utilizar los parámetros de conexión que utilizamos en la línea de comandos, seguido del signo menor que y el nombre del archivo que tiene las sentencias en sql.

# Ejecutar las consultas del archivo
# archivo.sql en mysql con el usuario root
# sin contraseña
$ mysql -u root < archivo.sql

# Utilizar el usuario root
# con contraseña root
$ mysql -u root -proot < archivo.sql

# Utilizar el usuario root
# con contraseña root
# utilizar el puerto 8889 de localhost
$ mysql -h localhost -P 8889 -u root -proot < archivo.sql

Al hacer esto se ejecutan todos los comandos que se encuentran en el script. Si llega a existir un error en alguna de las sentencias se detiene la ejecución del archivo. Para ejecutar todas las sentencias – sin importar si hay errores – se le agrega la opción force.

# Mismos ejemplos
# que el bloque de código anterior
# utilizando --force para que,
# en caso de existir algún error en 
# una consulta, la ejecución del archivo
# continúe hasta el final.

$ mysql -u root --force < archivo.sql

$ mysql -u root -proot --force < archivo.sql

$ mysql -h localhost -P 8889 -u root -proot --force < archivo.sql

MySQL y el sistema operativo

Al utilizar MySQL para procesar archivos por lote se pueden utilizar las funciones del Sistema Operativo para trabajar con los resultados de una mejor manera.

Utilizar los paginadores more o less para examinar los resultados:

# Mostrar los resultados utilizando 
# el comando less

$ mysql -u root --force < archivo.sql | less

# Mostrar los resultados utilizando 
# el comando more 

$ mysql -u root --force < archivo.sql | more

Guardar los resultados en otro archivo para análisis posterior.

# Guardar los resultados de
# las consultas en el archivo resultados 
# del script

$ mysql -u root --force < archivo.sql > resultados-del-script.txt

¿Para qué utilizar scripts?

Para ahorrar trabajo y automatizar procesos.

Ejemplos:

Cuando se realiza(n) la(s) misma(s) consulta(s) de manera frecuente es mejor tener un script, ejecutarlo y revisar los resultados.
Si se van a realizar tareas similares es más fácil duplicar un script y editarlo.

Al escribir consultas que incluyen varias lineas es posible cometer algún error. Si la consulta está almacenada en un script es más fácil corregir esos errores porque no se tiene que teclear toda la consulta de nuevo.

Si se va a hacer respaldo de la base de datos cada determinado tiempo, en lugar de exportar las bases de datos manualmente, es más práctico hacer un script y ejecutarlo con cron.

Nota:
Al iniciar sesión a MySQL desde la línea de comandos no está asignada una base de datos.
Lo mismo sucede al mandar ejecutar un archivo batch. Por eso, al utilizar estos archivos,
es conveniente que en la parte superior se elija la base de datos sobre la cuál se van a realizar las consultas.

Es conveniente incluir las sentencias SET NAMES / SET CHARACTER SET para establecer el conjunto de caracteres que van a ser utilizados para el envío / recepción de datos entre MySQL y la conexión que estemos utilizando.

-- En el archivo batch
-- definimos la base de datos
-- que queremos utilizar. 

-- Si el texto de entrada o salida
-- tiene caracteres que no son ASCII
-- es conveniente utilizar SET NAMES
-- y SET CHARACTER SET

USE tutoriales;
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;

-- Aquí van las sentencias SQL
-- como las que hemos hecho. 

SELECT nombre, email FROM usuarios;