Introducción a MySQL y MySQL Workbench
Repaso de los fundamentos: qué es una base de datos, para qué sirve y la diferencia entre bases de datos relacionales (SQL) y no relacionales (NoSQL). Introducción a MySQL como motor relacional y contexto de sus casos de uso más comunes.
Resumen rápido
Repaso de los fundamentos: qué es una base de datos, para qué sirve y la diferencia entre bases de datos relacionales (SQL) y no relacionales (NoSQL). Introducción a MySQL como motor relacional y contexto de sus casos de uso más comunes.
Conceptos clave
Sistema organizado para almacenar, gestionar y recuperar información de manera eficiente. Garantiza estructura, integridad y acceso controlado a los datos.
Organiza los datos en tablas (filas y columnas) con un esquema fijo. Las relaciones entre tablas se establecen con claves primarias y foráneas. Usa SQL como lenguaje de consulta.
Bases de datos no relacionales. Almacenan datos en formatos flexibles como JSON, documentos o grafos, sin esquema fijo. Escalan horizontalmente agregando más servidores.
Structured Query Language. Lenguaje estándar para consultar y gestionar bases de datos relacionales. Permite crear tablas, insertar, modificar, borrar y consultar datos.
Sistema de gestión de bases de datos relacionales (SGBDR) de código abierto. Desarrollado por MySQL AB, actualmente propiedad de Oracle. Uno de los más usados en aplicaciones web.
Identificador único de cada fila en una tabla. No puede repetirse ni ser nulo. Por convención, casi siempre es el campo id.
Campo en una tabla que referencia la clave primaria de otra tabla. Permite relacionar datos entre tablas sin duplicarlos.
Operación SQL que combina filas de dos o más tablas usando la relación entre sus claves. Existen distintos tipos: INNER, LEFT, RIGHT y FULL.
Contenido de la clase
¿Qué es una base de datos?
Un sistema organizado para almacenar, gestionar y recuperar información de manera eficiente. La clave está en "organizado": no es simplemente guardar datos en cualquier sitio, sino hacerlo con estructura, relaciones claras y reglas que garantizan su coherencia.
- Almacenamiento estructurado: cada dato tiene su lugar y su tipo. Evita duplicidades y desorden.
- Acceso rápido: las consultas con filtros complejos devuelven resultados en milisegundos, incluso con millones de registros.
- Integridad: las reglas del esquema impiden guardar datos inválidos o inconsistentes.
- Seguridad: control de acceso por usuario y por nivel, desde solo lectura hasta administración completa.
Ejemplos del día a día: la agenda de contactos del móvil (nombre, teléfono, dirección organizados por campo) o el catálogo de Netflix (películas, usuarios, valoraciones, géneros, historial) son bases de datos con estructura bien definida.
Relacionales vs. no relacionales
| Aspecto | Relacional (SQL) | No relacional (NoSQL) |
|---|---|---|
| Estructura | Tablas con esquema fijo (filas y columnas) | Documentos, grafos o JSON sin esquema rígido |
| Escalabilidad | Vertical: mejor hardware | Horizontal: más servidores en paralelo |
| Lenguaje | SQL estándar compartido | API propia de cada motor |
| Uso típico | Bancos, inventarios, e-commerce | Redes sociales, IoT, apps en tiempo real |
| Ejemplos | MySQL, PostgreSQL, SQLite, Oracle | MongoDB, Redis, Cassandra, DynamoDB |
No son excluyentes. Una app de delivery puede usar SQL para pedidos y clientes (datos estructurados) y NoSQL para las reseñas y fotos de los restaurantes (datos variables).
¿Cuándo usar SQL y cuándo NoSQL?
- SQL si los datos son estructurados y predecibles: perfiles de usuario, inventarios, transacciones bancarias, facturas.
- SQL si necesitas transacciones complejas con garantías de integridad (ACID).
- NoSQL si los datos cambian de forma con frecuencia o no tienen un esquema fijo.
- NoSQL si necesitas escalar horizontalmente a gran volumen: millones de eventos, sensores IoT, feeds de redes sociales.
¿Qué es MySQL?
MySQL es un sistema de gestión de bases de datos relacionales (SGBDR) de código abierto basado en SQL. Es uno de los motores más usados en el mundo, especialmente en aplicaciones web, por su equilibrio entre rendimiento, simplicidad y recursos.
- Código abierto: gratuito para uso comunitario (Community Edition).
- Alto rendimiento: optimizado para consultas rápidas incluso con grandes volúmenes de datos.
- Multiplataforma: Windows, Linux, macOS y entornos cloud (AWS, GCP, Azure).
- Seguridad avanzada: cifrado, autenticación de usuarios y gestión de permisos por niveles.
- Alta disponibilidad: replicación, clustering y copias de seguridad automáticas.
| Motor | Puntos fuertes | Uso ideal |
|---|---|---|
| MySQL | Rápido, fácil de usar, bajo consumo de recursos | Aplicaciones web tradicionales |
| PostgreSQL | Más avanzado, extensible, mejor para análisis | Sistemas de análisis y data science |
| SQLite | Sin servidor, muy ligero, un solo archivo | Apps móviles, proyectos pequeños |
| MongoDB | Flexible, escala horizontalmente, NoSQL | Datos variables, apps en tiempo real |
Casos de uso de MySQL
- Aplicaciones web: la mayoría de webs con backend tradicional (PHP, Node.js, Python, Java) usan MySQL.
- CMS: WordPress, Joomla y sistemas de foros almacenan contenido, usuarios y configuración en MySQL.
- E-commerce: Magento y plataformas similares guardan catálogos, pedidos y clientes en MySQL.
- Aplicaciones empresariales: inventarios, reservas de hotel, sistemas de facturación, gestión de RRHH.
- Análisis de datos: Python con Pandas, Tableau y Power BI se integran con MySQL para generar reportes.
- APIs y apps móviles: MySQL como backend de datos con lenguajes como Node.js, PHP o Python.
Código y ejemplos
Estructura básica: dos tablas relacionadas
-- Tabla principal: un registro por cliente
CREATE TABLE clientes (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL
);
-- Tabla secundaria: los pedidos apuntan al cliente por su id
CREATE TABLE pedidos (
id INT PRIMARY KEY AUTO_INCREMENT,
cliente_id INT NOT NULL,
producto VARCHAR(200),
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
); cliente_id es clave foránea en pedidos y clave primaria en clientes. Este vínculo es la base de los JOINs: permite saber qué pedido pertenece a qué cliente sin duplicar el nombre del cliente en cada fila.
Consulta con JOIN: ver pedidos con el nombre del cliente
SELECT clientes.nombre, pedidos.producto
FROM pedidos
INNER JOIN clientes ON pedidos.cliente_id = clientes.id; Errores comunes
Buenas prácticas
Ejercicios
Checklist final
- Entiendo qué es una base de datos y cuáles son sus funciones clave
- Sé distinguir una base de datos relacional de una no relacional y en qué casos usar cada una
- Conozco las características principales de MySQL y su posicionamiento frente a otros motores
- Entiendo qué son las claves primarias y foráneas y cómo se relacionan dos tablas
- Sé qué hace un JOIN y para qué sirve
¿Has terminado la clase?
Márcala como repasada y vuelve cuando quieras revisarla.