MySQL

img

¿Qué es MySQL?

MySQL es un RDBMS open source que utiliza el lenguaje SQL (Structured Query Language) para gestionar y manipular datos.
Se destaca por su velocidad, estabilidad y facilidad de uso, lo que lo convierte en una opción sólida tanto para proyectos pequeños como para aplicaciones empresariales.

Diferencias clave frente a otros sistemas:

2. ¿Para qué se usa?

MySQL se utiliza principalmente para almacenar, organizar y gestionar datos estructurados.
Es especialmente útil en proyectos donde la integridad de datos y las relaciones entre ellos son fundamentales.

Contextos ideales:

3. ¿Qué puedo construir con MySQL?

Con MySQL puedes desarrollar una amplia variedad de soluciones, tales como:

💡 MySQL es la base de datos detrás de plataformas como WordPress, Shopify y Facebook (en sus inicios).

4. ¿Cuándo es más conveniente usarlo?

MySQL es más conveniente cuando:

Alternativas que podrían ser mejores:

Buenas prácticas recomendadas

Para escribir buen código en MySQL y mantener una base de datos escalable y segura, sigue estas recomendaciones:

Diseño y estructura

Rendimiento

Seguridad

Mantenimiento


Resumen rápido

✅ Fortalezas principales:

⚠️ Debilidades principales:

🛠️ Cuándo usarlo:

🚫 Cuándo evitarlo:


Temas


Conceptos relacionados

Antes de comenzar a trabajar con MySQL, es importante familiarizarse con ciertos conceptos fundamentales que facilitarán el diseño y manejo de bases de datos.

1. Base de Datos (Database)

Un contenedor que organiza y almacena datos relacionados.

Ejemplo: una base de datos para un e-commerce podría contener tablas como usuarios, productos y pedidos.

2. Tabla (Table)

Estructura que almacena datos en filas (rows) y columnas (columns).
Cada fila es un registro y cada columna representa un atributo.

Ejemplo: una tabla usuarios con columnas como id, nombre, email._

3. Fila (Row) / Registro (Record)

Representa una entrada individual de datos dentro de una tabla.

Ejemplo en tabla usuarios:

id | nombre  | email
1  | Ana     | ana@email.com

4. Columna (Column) / Campo (Field)

Representa un tipo de dato específico en la tabla.

Ejemplo: la columna email en la tabla usuarios almacena direcciones de correo.

5. Llave Primaria (Primary Key)

Columna o conjunto de columnas que identifican de forma única a cada registro en una tabla.
Generalmente se llama id.

Ejemplo: id en la tabla usuarios.

6. Llave Foránea (Foreign Key)

Columna que establece una relación con una clave primaria en otra tabla.

Ejemplo:

7. Tipos de Datos

Definen el tipo de valor que se puede almacenar en una columna. Algunos tipos comunes en MySQL:

8. Consultas SQL (Queries)

Instrucciones para interactuar con la base de datos.
Los principales tipos son:

9. Índices (Indexes)

Estructuras que mejoran la velocidad de búsqueda en una tabla, similar a un índice en un libro.

Se recomienda crear índices en columnas que se consulten frecuentemente.

10. Joins

Combinan datos de varias tablas basadas en una relación común:

🔼 temas


Herramientas recomendadas

Para trabajar de forma eficiente con MySQL, estas son las herramientas clave que deberías conocer:

1. MySQL Workbench (Oficial)

🔗 Descargar MySQL Workbench

2. phpMyAdmin

🔗 Sitio oficial phpMyAdmin

3. DBeaver

🔗 Descargar DBeaver

4. CLI - MySQL Command Line Client

Ejemplo:

mysql -u root -p

5. VS Code + Extensiones SQL

Usar Visual Studio Code con extensiones de SQL permite:

Extensiones recomendadas:

6. Docker

Ejemplo rápido:

docker run --name mysql-dev -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d mysql:latest

Resumen de Herramientas

Herramienta Tipo Uso Principal
MySQL Workbench Gráfica Oficial Administración y modelado visual
phpMyAdmin Web Gestión en entornos web y hosting
DBeaver Escritorio Multi-base de datos y visualización avanzada
CLI MySQL Terminal Administración avanzada y scripting
VS Code + Plugins Editor de código Consultas y edición de scripts SQL
Docker Virtualización Entornos de desarrollo aislados

🔼 temas


Snippets rápidos

Fragmentos que se utilizan frecuentemente en el desarrollo con MySQL.

1. Crear Base de Datos y Usarla

CREATE DATABASE tienda;
USE tienda;

2. Crear Tabla con Clave Primaria

CREATE TABLE usuarios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(50),
  email VARCHAR(100) UNIQUE
);

3. Insertar Datos

INSERT INTO usuarios (nombre, email)
VALUES ('Ana Pérez', 'ana@email.com');

4. Consultar Datos

SELECT * FROM usuarios;              -- Todos los registros
SELECT nombre, email FROM usuarios;  -- Columnas específicas
SELECT * FROM usuarios WHERE id = 1;

5. Actualizar Datos

UPDATE usuarios SET nombre = 'Ana Gómez'
WHERE id = 1;

6. Eliminar Datos

DELETE FROM usuarios WHERE id = 1;

7. Crear Índice

CREATE INDEX idx_email ON usuarios(email);

8. Relaciones entre Tablas (FK)

CREATE TABLE pedidos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  usuario_id INT,
  fecha DATETIME,
  FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

9. Join Básico

SELECT usuarios.nombre, pedidos.fecha
FROM usuarios
INNER JOIN pedidos ON usuarios.id = pedidos.usuario_id;

10. Respaldo y Restauración

mysqldump -u root -p tienda > backup.sql    # Crear respaldo
mysql -u root -p tienda < backup.sql        # Restaurar respaldo

🔼 temas


Comandos

Resumen de comandos clave con ejemplos cortos y directos.

Comando / Acción Ejemplo Descripción
Crear base de datos CREATE DATABASE tienda; Crea una nueva base de datos.
Usar base de datos USE tienda; Selecciona la base activa.
Crear tabla CREATE TABLE productos (...); Define una nueva tabla.
Insertar datos INSERT INTO productos VALUES (...); Agrega un nuevo registro.
Consultar datos SELECT * FROM productos; Lee datos de una tabla.
Filtrar datos SELECT * FROM productos WHERE stock > 0; Filtra resultados con condición.
Actualizar datos UPDATE productos SET stock = 20 WHERE id=1; Modifica registros existentes.
Eliminar datos DELETE FROM productos WHERE id=1; Borra registros de la tabla.
Crear índice CREATE INDEX idx_nombre ON productos(nombre); Mejora la búsqueda en una columna.
Agregar FK FOREIGN KEY (usuario_id) REFERENCES usuarios(id); Crea relación entre tablas.
Join SELECT ... FROM A INNER JOIN B ON ...; Une datos de varias tablas.
Eliminar tabla DROP TABLE productos; Borra una tabla completa.
Eliminar base de datos DROP DATABASE tienda; Borra la base de datos.

🚀 Mini Cheat Sheet Visual

-- Base de datos
CREATE DATABASE nombre;   -- Crear base
USE nombre;               -- Seleccionar base
DROP DATABASE nombre;     -- Eliminar base

-- Tablas
CREATE TABLE tabla (...); -- Crear tabla
ALTER TABLE tabla ...;    -- Modificar tabla
DROP TABLE tabla;         -- Eliminar tabla

-- CRUD
INSERT INTO tabla (...) VALUES (...);       -- Crear
SELECT * FROM tabla;                        -- Leer
UPDATE tabla SET columna=valor WHERE id=1;  -- Actualizar
DELETE FROM tabla WHERE id=1;               -- Eliminar

-- Relaciones
FOREIGN KEY (columna) REFERENCES otra_tabla(id);

-- Consultas avanzadas
SELECT columna FROM tabla WHERE condicion;            -- Filtro
SELECT columna, COUNT(*) FROM tabla GROUP BY columna; -- Agrupar
SELECT * FROM A INNER JOIN B ON A.id = B.a_id;        -- Joins

💡 Consejo: Usa LIMIT para limitar resultados:

SELECT * FROM usuarios LIMIT 5;

🔼 temas


Conceptos Claves

🟢 Básico

1. Diferencia entre DELETE, TRUNCATE y DROP

2. Clave primaria (PRIMARY KEY) vs clave foránea (FOREIGN KEY)

CREATE TABLE usuarios (
  id INT PRIMARY KEY,
  nombre VARCHAR(50)
);

CREATE TABLE pedidos (
  id INT PRIMARY KEY,
  usuario_id INT,
  FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

3. Diferencia entre VARCHAR y CHAR

Tipo Tamaño fijo Tamaño variable
CHAR No
VARCHAR No

4. Diferencia entre WHERE y HAVING

Ejemplo:

-- Mostrar productos con stock promedio mayor a 50
SELECT categoria, AVG(stock) AS promedio_stock
FROM productos
GROUP BY categoria
HAVING promedio_stock > 50;

5. Función del JOIN en SQL

JOIN combina datos de varias tablas basándose en una relación.

Tipos más comunes:

SELECT u.nombre, p.fecha
FROM usuarios u
INNER JOIN pedidos p ON u.id = p.usuario_id;

🟡 Intermedio

6. Índices en MySQL

CREATE INDEX idx_email ON usuarios(email);

7. Diferencia entre InnoDB y MyISAM

Característica InnoDB MyISAM
Transacciones No
Integridad referencial (FK) No
Bloqueo Por fila Por tabla
Velocidad en lecturas Media Alta

Elección recomendada: InnoDB, especialmente en aplicaciones web con muchas operaciones simultáneas.

8. Transacciones ACID

START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT; -- o ROLLBACK si algo falla

9. Stored Procedure

DELIMITER //
CREATE PROCEDURE obtenerUsuarios()
BEGIN
  SELECT * FROM usuarios;
END //
DELIMITER ;

10. Normalización de Bases de Datos

Proceso para organizar datos y evitar redundancia.

Importancia: Mejora la integridad y eficiencia de la base.


🔴 Avanzado

11. Subconsulta correlacionada vs subconsulta normal

Ejemplo correlacionada:

SELECT nombre
FROM usuarios u
WHERE saldo > (SELECT AVG(saldo) FROM cuentas c WHERE c.usuario_id = u.id);

12. Replicación en MySQL

Proceso de copiar datos de un servidor a otro.

Tipos de replicación:

Uso: Balanceo de carga, copias de seguridad en tiempo real.

13. Control de concurrencia

Permite que múltiples usuarios accedan a la base sin conflictos.

Problemas comunes:

Solución en MySQL: Bloqueos por fila (InnoDB) y niveles de aislamiento.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

14. Particionamiento de datos

Divide una tabla grande en partes más pequeñas para mejorar rendimiento.

CREATE TABLE ventas (
  id INT,
  fecha DATE
)
PARTITION BY RANGE (YEAR(fecha)) (
  PARTITION p2023 VALUES LESS THAN (2024),
  PARTITION p2024 VALUES LESS THAN (2025)
);

15. Trigger en MySQL

Bloque de código que se ejecuta automáticamente ante eventos INSERT, UPDATE o DELETE.

Ejemplo: Registro automático en tabla de auditoría

CREATE TRIGGER registro_insert
AFTER INSERT ON usuarios
FOR EACH ROW
INSERT INTO auditoria (usuario_id, accion, fecha)
VALUES (NEW.id, 'INSERT', NOW());

🔼 temas