En este apunte práctico voy a revisar cómo crear una base de datos automáticamente en MySQL con Bash.
Para esto voy a compartirles un pequeño programa que hice para este efecto.
¿Cuál es la idea?
La idea es crear un programa que pueda ayudar a crear una base de datos de forma rápida. Esto incluye: el nombre de la base, el nombre de la tabla, además de los nombres y el tipo de las columnas.
Este código no nos pide que ingresemos datos en la tabla, eso va a quedar para otro proyecto. Hoy solamente busco facilitar los primeros pasos al armar un posible proyecto en MySQL.
Primero necesito tener instalado MySQL y hay varias formas de hacer esto. Pero voy a mencionar la que utilice yo, esto fue con el comando:
sudo apt install mysql-server
Con eso ya es posible empezar a trabajar con las utilidades de MySQL, y esto incluye la capacidad de crear bases de datos desde la terminal. Justo lo que estoy necesitando.
El código
Les comparto el código del programa completo. Al final voy a agregar una pequeña explicacion de lo que hace.
#!/bin/bash # Fecha 10/09/2024 # Programa: crea una base de datos MySQL por medio de un código escrito en Bash. # Expresiones regulares para establecer el formato del input db_regex='^[a-zA-Z0-9_]+$' tabla_regex='^[a-zA-Z0-9_]+$' columna_regex='^[a-zA-Z0-9_ ]+$' conseguir_nombre_database() { while true; do read -p "Ingrese el nombre de la base de datos: " nombre_nueva_database if [[ $nombre_nueva_database =~ $db_regex ]]; then if mysql -u root -p -s -N -e "SHOW DATABASES" | grep -Fxq "$nombre_nueva_database"; then echo "La base de datos $nombre_nueva_database ya existe. No se continuará con esta función." else break fi else echo "El nombre solo puede contener letras, números o guiones bajos." fi done echo "$nombre_nueva_database" } conseguir_nombre_tabla() { while true; do read -p "Ingrese el nombre para la tabla: " nombre_tabla if [[ $nombre_tabla =~ $tabla_regex ]]; then break else echo "El nombre solamente puede tener letras, números y guiones bajos." fi done echo "$nombre_tabla" } conseguir_num_columnas() { while true; do read -p "Establezca la cantidad de columnas: " numero_columnas if [[ $numero_columnas =~ ^[1-9][0-9]*$ ]]; then break else echo "El número de columnas solamente puede ser un entero positivo." fi done echo "$numero_columnas" } conseguir_info_columnas() { local numero_columnas="$1" local columns="" for (( i=1; i<=$numero_columnas; i++ )); do while true; do read -p "Ingrese el nombre de la columna N° $i: " nombre_columna if [[ $nombre_columna =~ $columna_regex ]]; then nombre_columna=$(echo "$nombre_columna" | tr ' ' '_') break else echo "El nombre de la columna solo puede tener letras, números y guiones bajos." fi done while true; do read -p "Ingrese el tipo de la columna N° $i (TEXT, INT, DATE, FLOAT): " tipo_columna if [[ "$tipo_columna" =~ ^(INT|TEXT|DATE|FLOAT)$ ]]; then break else echo "El tipo de la columna solamente puede ser INT, FLOAT, TEXT, o DATE." fi done if [ $i -eq $numero_columnas ]; then columns+="$nombre_columna $tipo_columna" else columns+="$nombre_columna $tipo_columna," fi done echo "$columns" } create_database() { local nombre_nueva_database="$1" local nombre_tabla="$2" local columns="$3" # Create the database mysql -u root -p -v -e "CREATE DATABASE IF NOT EXISTS \`$nombre_nueva_database\`;" if [ $? -ne 0 ]; then echo "Ocurrió un error al momento de crear la base de datos." exit 1 fi # Create the table mysql -u root -p -v -e "CREATE TABLE IF NOT EXISTS \`$nombre_nueva_database\`.\`$nombre_tabla\` ($columns) ENGINE=InnoDB;" if [ $? -ne 0 ]; then echo "Ocurrió un error al momento de crear la tabla." exit 1 fi } # Main execution nombre_nueva_database=$(conseguir_nombre_database) if [ $? -ne 0 ]; then echo "No se pudo crear la base de datos. Saliendo." exit 1 fi nombre_tabla=$(conseguir_nombre_tabla) numero_columnas=$(conseguir_num_columnas) columns=$(conseguir_info_columnas "$numero_columnas") echo "Comando MySQL: CREATE DATABASE IF NOT EXISTS \`$nombre_nueva_database\`; CREATE TABLE IF NOT EXISTS \`$nombre_nueva_database\`.\`$nombre_tabla\` ($columns) ENGINE=InnoDB;" create_database "$nombre_nueva_database" "$nombre_tabla" "$columns" echo "La base de datos fue creada con éxito."
¿Cómo funciona?
Para empezar, el programa establece algunas expresiones regulares para marcar las reglas en los nombres que vamos a poder utilizar.
Luego, de forma secuencial, el programa pide el nombre de la base de datos, el nombre de la tabla y el número de columnas.
En base al número de columnas, el código nos pide el nombre y el tipo de las columnas. Para mantener todo lo más simple posible, solamente se admiten cuatro tipos de datos en la futura tabla.
Finalmente el programa usa el comando mysql para generar la base de datos y nos avisa si pudo completar el trabajo con éxito.
Hay que notar que el programa utiliza:
mysql -u root -p
Como opciones para generar la base de datos y todo lo que sigue. Pero podemos cambiar “root” por el nombre de nuestra propia cuenta para usar otro nivel de administración.
¿Qué se puede mejorar?
Seguramente hay muchas cosas que se pueden mejorar en el programa.
Si tengo que decir dos cosas:
- Agregar la opción para generar múltiples tablas en lugar de una sola.
- Mejorar la forma en que se resuelven los errores.
No me puse a hacer esas mejoras para empezar a hacer otros proyectos, pero tal vez en algún momento vuelva a revisarlo.
Conclusión
Espero que este programa te resulte de utilidad.
Por favor, avisame si encontrás algún error así voy a poder corregirlo.
La seguimos en el próximo apunte.
Leave a Reply