MySQL - Capitulo 1
Una guía através del camino de las bases de datos con MySQL uno de los sistemas de gestión de bases de datos más conocidos y utilizados en el mundo de la programación.
Síguenos con el tutorial
Section titled “Síguenos con el tutorial”- En QuéPasalinux MySQL - Introducción a MySQL con Docker un vídeo práctico sobre MySQL y Docker
Volver a Página Principal
Ver Codigo en GitLab
📚 Curso de Capacitación de MySQL
Section titled “📚 Curso de Capacitación de MySQL”🤝 Módulo 1: Introducción a MySQL con Docker
Section titled “🤝 Módulo 1: Introducción a MySQL con Docker”¡Bienvenidos al Módulo 1! En esta sección, profundizaremos en el proceso de inicialización de MySQL con Docker, crear y modificar tablas, e insertar y consultar datos básicos.
Objetivo: Que los participantes entiendan qué es una base de datos, para qué sirve, y logren interactuar con MySQL utilizando el CLI (Command Line Interface) dentro de un contenedor Docker.
Público: Personas sin experiencia previa en bases de datos.
1. ¿Qué es una Base de Datos?
Section titled “1. ¿Qué es una Base de Datos?”-
Una base de datos es un conjunto organizado de datos que se almacena y se recupera de manera eficiente.
-
Tipos de Bases de Datos:
- SQL (Relacionales): Las más comunes. Organizan los datos en tablas con filas y columnas (como hojas de cálculo, pero más potentes). MySQL es un ejemplo.
- NoSQL (No Relacionales): Otros tipos para datos más flexibles (solo mencionar que existen).
-
¿Qué es MySQL?
- Es un Sistema Gestor de Bases de Datos Relacionales (SGBDR).
- Es de código abierto, muy popular y se usa para sitios web, aplicaciones móviles, sistemas empresariales.
2. Preparando el Entorno con Docker
Section titled “2. Preparando el Entorno con Docker”-
¿Por qué Docker? (La ventaja para los principiantes)
- Simplifica la instalación: No hay que instalar MySQL directamente en su máquina (que a veces da errores).
- Aislamiento: MySQL corre en su propio “paquete” (contenedor) sin afectar el resto del sistema.
- Portabilidad: Funciona igual en cualquier máquina con Docker.
- “Caja mágica”: Piénsenlo como una caja pre-configurada que ya tiene MySQL listo para usar.
-
Revisión del
docker-compose.ymlYAMLservices:mysql:image: mysql:latestrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: adminMYSQL_DATABASE: dbMYSQL_USER: adminMYSQL_PASSWORD: adminports:- "3306:3306" # Exponer el puerto 3306 para conexiones externasnetworks:- general # Red compartidaphpmyadmin:image: phpmyadmin/phpmyadmin:latestrestart: alwaysports:- "8080:80" # phpMyAdmin accesible en el puerto 8080 del hostenvironment:PMA_HOST: mysql # Conectar al servicio MySQLPMA_USER: rootPMA_PASSWORD: admindepends_on:- mysql # Levantar phpMyAdmin después de MySQLnetworks:- general # Red compartidanetworks:general:driver: bridge # Red compartida entre los servicios- Puntos importantes a enfatizar:
image: mysql:8.0: Estamos usando la imagen oficial de MySQL.MYSQL_ROOT_PASSWORD: ¡La contraseña de root! Recuérdenla.MYSQL_DATABASE: Se creará una base de datos inicial para nosotros.volumes: Importante para que sus datos no se pierdan.
- Puntos importantes a enfatizar:
3. Levantando MySQL con Docker Compose
Section titled “3. Levantando MySQL con Docker Compose”- Abrir la Terminal/Línea de Comandos:
- Navegar a la carpeta del
docker-compose.yml:Bashcd /ruta/a/tu/proyecto - Iniciar los servicios:
Bashdocker-compose up -d
up: Inicia los servicios definidos en eldocker-compose.yml.-d: Ejecuta los contenedores en segundo plano (detached mode) para que puedan seguir usando la terminal.
- Verificar que el contenedor esté corriendo:
Bashdocker ps
- Deberían ver un contenedor con el nombre de su servicio (ej.
mi_proyecto_db_1) ymysql:8.0en la columnaIMAGE.
- Deberían ver un contenedor con el nombre de su servicio (ej.
- Revisar los logs (si hay problemas):
Bashdocker-compose logs db
dbes el nombre de su servicio en eldocker-compose.yml. Aquí verán si MySQL inició correctamente o si hay algún error.
4. Conectándose al CLI de MySQL
Section titled “4. Conectándose al CLI de MySQL”- ¿Qué es el CLI (Command Line Interface)?
- Es una forma de interactuar con MySQL escribiendo comandos de texto directamente en la terminal, sin interfaz gráfica.
- Es muy potente y fundamental para los administradores de bases de datos.
- Paso a paso para conectar
- Identificar el nombre del contenedor MySQL:
BashBusquen el nombre en la columnadocker psNAMES(ej.mi_proyecto_db_1). 2. Ejecutar el cliente MySQL dentro del contenedor:Bashdocker exec -it <nombre_del_contenedor> mysql -u root -p- `docker exec`: Ejecuta un comando dentro de un contenedor en ejecución.- `-it`: Permite la interacción y una terminal limpia.- `<nombre_del_contenedor>`: Sustituyan por el nombre real de su contenedor.- `mysql -u root -p`: El comando para iniciar el cliente MySQL como usuario `root` y solicitar la contraseña.- Introducir la contraseña: Usen la contraseña que definieron en
MYSQL_ROOT_PASSWORDen sudocker-compose.yml. - ¡Bienvenido al prompt de MySQL! Si ven
mysql>, están dentro.
- Primeros Comandos Sencillos:
- Ver las bases de datos existentes:
SQLSHOW DATABASES;
- Explicar: Observarán
mi_primera_bd(la que se creó con Docker Compose),mysql,information_schema,performance_schema,sys(estas son bases de datos internas de MySQL, ¡no tocarlas aún!).
- Explicar: Observarán
- Seleccionar una base de datos para trabajar:
SQLUSE mi_primera_bd;
- Explicar: Esto les dice a MySQL que todos los comandos posteriores se aplicarán a
mi_primera_bd. El prompt cambiará aDatabase changed.
- Explicar: Esto les dice a MySQL que todos los comandos posteriores se aplicarán a
- Ver las tablas dentro de la base de datos actual (ahora no habrá ninguna):
SQLSHOW TABLES;
- Explicar: Esto mostrará
Empty setporque aún no hemos creado ninguna tabla.
- Explicar: Esto mostrará
- Salir del CLI de MySQL:
SQLo simplemente presionarEXIT;
Ctrl+D.
- Ver las bases de datos existentes:
5. Primeras Interacciones: Creando una Tabla Sencilla
Section titled “5. Primeras Interacciones: Creando una Tabla Sencilla”- Concepto de Tabla: Una tabla es donde organizamos la información de un tipo específico (ej. “clientes”, “productos”, “doctores”).
- Columnas: Las categorías de información (ej.
nombre,edad,ciudad). - Filas: Los registros individuales (ej. “Juan”, “30”, “Madrid”).
- Columnas: Las categorías de información (ej.
- Tipos de Datos (Muy básico y esencial):
INT: Para números enteros (ej. edad, cantidad).VARCHAR(tamaño): Para texto corto/mediano (ej. nombre, ciudad, con un límite de caracteres).DATE: Para fechas (ej. fecha de nacimiento).PRIMARY KEY: Una columna especial que identifica de forma única cada fila (ej.id_cliente). Es como un número de identificación único.AUTO_INCREMENT: Para que laPRIMARY KEYnumérica se genere automáticamente.
- Creando la primera tabla (ejemplo:
alumnos):- Conéctense de nuevo al CLI y usen la base de datos
mi_primera_bd:Bashdocker exec -it <nombre_del_contenedor> mysql -u root -pUSE mi_primera_bd; - Comando
CREATE TABLE:SQLCREATE TABLE alumnos (id INT AUTO_INCREMENT PRIMARY KEY,nombre VARCHAR(100) NOT NULL,apellido VARCHAR(100) NOT NULL,edad INT,fecha_nacimiento DATE,correo_electronico VARCHAR(255) UNIQUE,telefono VARCHAR(20),fecha_inscripcion DATETIME DEFAULT CURRENT_TIMESTAMP,activo BOOLEAN DEFAULT TRUE,promedio_calificaciones DECIMAL(4,2),comentarios TEXT);- Explicar cada parte:
CREATE TABLE, nombre de la tabla, paréntesis con las columnas, nombre de la columna, tipo de dato, restricciones (PRIMARY KEY,AUTO_INCREMENT). - ¡Importante el punto y coma al final
;!
- Explicar cada parte:
- Verificar que la tabla se creó:
SQLDeberían verSHOW TABLES;
alumnos. - Ver la estructura de la tabla:
SQLEsto mostrará las columnas, sus tipos de datos, si pueden ser nulas, etc.DESCRIBE alumnos;
- Conéctense de nuevo al CLI y usen la base de datos
6. Insertando Datos
Section titled “6. Insertando Datos”- Comando
INSERT INTO: Para añadir nuevas filas (registros) a la tabla. - Sintaxis básica:
SQLINSERT INTO <nombre_tabla> (columna1, columna2, ...) VALUES (valor1, valor2, ...);
- Ejemplos prácticos:
SQLINSERT INTO alumnos (nombre, apellido, edad) VALUES ('Juan', 'Pérez', 20);INSERT INTO alumnos (nombre, apellido, edad) VALUES ('María', 'García', 22);INSERT INTO alumnos (nombre, apellido, edad) VALUES ('Carlos', 'López', 19);
- Explicar: Se especifican las columnas y luego los valores en el mismo orden.
- ¿Qué pasa con
id? Como esAUTO_INCREMENT, MySQL lo asigna solo.
7. Consultando Datos
Section titled “7. Consultando Datos”- Comando
SELECT: ¡El más usado! Para recuperar información de la base de datos. - Sintaxis básica:
SQLSELECT columna1, columna2 FROM <nombre_tabla>;SELECT * FROM <nombre_tabla>; -- Para todas las columnas
- Ejemplos prácticos:
- Ver todos los alumnos:
SQLSELECT * FROM alumnos;
- Ver solo nombres y apellidos:
SQLSELECT nombre, apellido FROM alumnos;
- Filtrar datos con
WHERE: Para obtener solo las filas que cumplen una condición.SQLSELECT * FROM alumnos WHERE edad > 20;SELECT * FROM alumnos WHERE nombre = 'Juan';- Operadores:
=,>,<,>=,<=,LIKE(para búsquedas de texto parcial, ej.LIKE 'M%'para nombres que empiezan con M).
- Operadores:
- Ordenar resultados con
ORDER BY:SQLSELECT * FROM alumnos ORDER BY apellido ASC; -- Ordenar por apellido ascendenteSELECT * FROM alumnos ORDER BY edad DESC; -- Ordenar por edad descendente - Contar filas con
COUNT():SQLSELECT COUNT(*) FROM alumnos; -- Cuántos alumnos haySELECT COUNT(*) FROM alumnos WHERE edad < 20; -- Cuántos alumnos tienen menos de 20 años
- Ver todos los alumnos:
8. Actualizando la Estructura de Tablas (ALTER TABLE)
Section titled “8. Actualizando la Estructura de Tablas (ALTER TABLE)”A veces, después de crear una tabla, necesitamos añadir nuevas columnas, eliminar las que ya no usamos, o cambiar el tipo de dato de una columna existente. Para esto, usamos el comando ALTER TABLE.
- Comando
ALTER TABLE: Para modificar la estructura de una tabla existente.
Sintaxis Básica
Section titled “Sintaxis Básica”Para añadir una columna:
ALTER TABLE <nombre_tabla> ADD COLUMN <nombre_nueva_columna> <tipo_dato> [restricciones];Para modificar una columna:
ALTER TABLE <nombre_tabla> MODIFY COLUMN <nombre_columna> <nuevo_tipo_dato> [nuevas_restricciones];Nota: En MySQL, CHANGE COLUMN se usa cuando quieres renombrar una columna y/o cambiar su tipo/definición al mismo tiempo.
Para renombrar una columna (usando CHANGE COLUMN):
ALTER TABLE <nombre_tabla> CHANGE COLUMN <nombre_antiguo> <nombre_nuevo> <tipo_dato> [restricciones];Para eliminar una columna:
ALTER TABLE <nombre_tabla> DROP COLUMN <nombre_columna>;Ejemplos Prácticos con la Tabla alumnos
Section titled “Ejemplos Prácticos con la Tabla alumnos”Conéctense de nuevo al CLI y usen la base de datos db:
docker exec -it <nombre_del_contenedor> mysql -u root -pUSE db;Ejemplo 1: Añadir una Nueva Columna (genero)
Section titled “Ejemplo 1: Añadir una Nueva Columna (genero)”ALTER TABLE alumnos ADD COLUMN genero VARCHAR(10);Explicación: Agregamos una columna genero de tipo VARCHAR con un tamaño de 10 caracteres. Por defecto, esta columna permitirá valores NULL.
Verificar el cambio:
DESCRIBE alumnos;Ejemplo 2: Modificar el Tipo de Dato de una Columna (telefono a VARCHAR(30) y añadir NOT NULL)
Section titled “Ejemplo 2: Modificar el Tipo de Dato de una Columna (telefono a VARCHAR(30) y añadir NOT NULL)”ALTER TABLE alumnos MODIFY COLUMN telefono VARCHAR(30) NOT NULL;Explicación: Cambiamos el tamaño máximo de telefono a 30 caracteres y lo hacemos NOT NULL, lo que significa que de ahora en adelante, cada nuevo alumno deberá tener un número de teléfono. Si ya existen filas con NULL en telefono, esta operación fallará a menos que primero actualices esos NULL a un valor válido.
Verificar el cambio:
DESCRIBE alumnos;Ejemplo 3: Renombrar una Columna (correo_electronico a email)
Section titled “Ejemplo 3: Renombrar una Columna (correo_electronico a email)”ALTER TABLE alumnos CHANGE COLUMN correo_electronico email VARCHAR(255) UNIQUE;Explicación: Renombramos la columna correo_electronico a email. ¡Importante! Al usar CHANGE COLUMN, deben especificar el tipo de dato completo y sus restricciones para la nueva columna, incluso si no los cambian. En este caso, mantenemos VARCHAR(255) UNIQUE.
Verificar el cambio:
DESCRIBE alumnos;Ejemplo 4: Eliminar una Columna (comentarios)
Section titled “Ejemplo 4: Eliminar una Columna (comentarios)”ALTER TABLE alumnos DROP COLUMN comentarios;Explicación: Eliminamos completamente la columna comentarios de la tabla alumnos. ¡Cuidado! Esta acción es irreversible y los datos en esa columna se perderán.
Verificar el cambio:
DESCRIBE alumnos;9. Actualizando y Eliminando Datos
Section titled “9. Actualizando y Eliminando Datos”- Comando
UPDATE: Para modificar datos existentes. ¡MUCHO CUIDADO CON ESTE COMANDO! - Sintaxis básica:
SQLUPDATE <nombre_tabla> SET columna1 = nuevo_valor1, columna2 = nuevo_valor2 WHERE condicion;
- Ejemplos prácticos:
- Cambiar la edad de un alumno específico:
SQLUPDATE alumnos SET edad = 21 WHERE nombre = 'Juan';
- Explicar: ¡El
WHEREes CRUCIAL! Si olvidan elWHERE, actualizarán todas las filas de la tabla.
- Explicar: ¡El
- Verificar el cambio:
SQLSELECT * FROM alumnos WHERE nombre = 'Juan';
- Cambiar la edad de un alumno específico:
- Comando
DELETE FROM: Para eliminar filas. ¡MUCHO CUIDADO CON ESTE COMANDO TAMBIÉN! - Sintaxis básica:
SQLDELETE FROM <nombre_tabla> WHERE condicion;
- Ejemplos prácticos:
- Eliminar un alumno específico:
SQLDELETE FROM alumnos WHERE nombre = 'Carlos';
- Explicar: De nuevo, ¡el
WHEREes VITAL! Sin él, se eliminan todas las filas.
- Explicar: De nuevo, ¡el
- Verificar la eliminación:
SQLSELECT * FROM alumnos;
- Eliminar un alumno específico:
10. Deteniendo y Limpiando el Entorno Docker
Section titled “10. Deteniendo y Limpiando el Entorno Docker”- Detener los servicios:
Bashdocker-compose down
- Esto detiene y elimina los contenedores, redes y volúmenes por defecto.
- Si quieren detener pero no eliminar los datos (solo el contenedor):
Bashdocker-compose stop
- Luego, para reiniciarlos:
docker-compose start.
- Luego, para reiniciarlos:
- Limpiar completamente (elimina datos si no usaron volúmenes persistentes correctamente):
Bashdocker-compose down -v
-v: También elimina los volúmenes nombrados, lo que borrará los datos de la base de datos. Usar con precaución.
Recomendaciones Adicionales para el Módulo:
Section titled “Recomendaciones Adicionales para el Módulo:”- Paso a paso y repetición: Hagan cada comando juntos, esperando que todos lo ejecuten y vean el resultado.
- Preguntas abiertas: Fomenten las preguntas constantemente. Es normal que surjan dudas al principio.
- Ejercicios rápidos: Después de cada sección (CREATE, INSERT, SELECT), propongan un mini-ejercicio para que los participantes lo hagan por sí mismos.
- Ej. “Crea una tabla
productosconid,nombreyprecio.” - Ej. “Inserta 3 productos.”
- Ej. “Selecciona los productos con precio mayor a 10.”
- Ej. “Crea una tabla
- Errores comunes: Anticipen y expliquen los errores comunes (olvidar el
;, elWHERE, errores de sintaxis). Demuéstrenlos y cómo corregirlos. - Metáforas y analogías: Sigan usando analogías para conceptos abstractos.
- Recursos Adicionales: