1.
DDL — Data Definition Language
Define la estructura de la base de datos. Comandos: CREATE, ALTER, DROP, TRUNCATE.
1.1. CREATE DATABASE
CREATE DATABASE nombre_bd;
USE nombre_bd;
1.2. CREATE TABLE
CREATE TABLE nombre_tabla (
id SERIAL PRIMARY KEY, -- autoincremental
nombre VARCHAR(100) NOT NULL,
categoria VARCHAR(50),
fecha DATE,
precio DECIMAL(10,2),
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Notas:
- PRIMARY KEY identifica de forma única cada fila.
- NOT NULL obliga a que la columna tenga valor.
- DEFAULT valor define un valor por defecto si no se especifica al insertar.
Si no existe previamente:
CREATE TABLE IF NOT EXISTS nombre_tabla (...);
Tabla de respaldo (misma estructura, sin datos):
CREATE TABLE tabla_bkp LIKE tabla_original;
Tabla de copia total (estructura + datos):
CREATE TABLE tabla_copia AS
SELECT * FROM tabla_original;
1.3. ALTER TABLE
-- Renombrar tabla
ALTER TABLE tabla_vieja RENAME TO tabla_nueva;
-- Agregar columna al final
ALTER TABLE tabla ADD COLUMN descripcion VARCHAR(200);
-- Agregar columna después de otra específica
ALTER TABLE tabla ADD COLUMN descripcion VARCHAR(200) AFTER nombre;
-- Agregar columna como PRIMERA columna
ALTER TABLE tabla ADD COLUMN disponible BOOLEAN FIRST;
-- Cambiar tipo de dato de una columna
ALTER TABLE tabla MODIFY COLUMN precio FLOAT;
-- Renombrar columna (y de paso se puede cambiar el tipo)
ALTER TABLE tabla CHANGE COLUMN nombre_viejo nombre_nuevo VARCHAR(100);
-- Eliminar columna
ALTER TABLE tabla DROP COLUMN columna_a_eliminar;
-- Agregar columna con valor por defecto
ALTER TABLE tabla ADD COLUMN ultima_actualizacion TIMESTAMP DEFAULT NULL;
-- Agregar restricción NOT NULL a columna existente
ALTER TABLE tabla MODIFY COLUMN email VARCHAR(200) NOT NULL;
-- Agregar clave foránea
ALTER TABLE tabla ADD CONSTRAINT fk_nombre
FOREIGN KEY (columna_id) REFERENCES otra_tabla(id);
-- Eliminar restricción
ALTER TABLE tabla DROP CONSTRAINT fk_nombre;
Tip: MODIFY cambia tipo/atributos sin renombrar. CHANGE permite renombrar y
cambiar tipo a la vez (hay que repetir la definición completa de la columna).
1.4. DROP
DROP TABLE tabla;
DROP TABLE IF EXISTS tabla; -- evita error si no existe
DROP DATABASE nombre_bd;
1.5. TRUNCATE
Borra todos los datos pero conserva la estructura (y reinicia el autoincremental):
TRUNCATE TABLE tabla;
2. DML — Data Manipulation Language
Trabaja con los datos dentro de las tablas. Comandos: INSERT, UPDATE, DELETE, SELECT.
2.1. INSERT
-- Registro completo
INSERT INTO tabla (col1, col2, col3)
VALUES (valor1, valor2, valor3);
-- Solo algunas columnas (el resto usa DEFAULT o NULL)
INSERT INTO tabla (id, nombre)
VALUES (1, 'Ejemplo');
-- Varios registros en una sola sentencia
INSERT INTO tabla (col1, col2)
VALUES
(valor1, valor2),
(valor1, valor2),
(valor1, valor2);
-- Copiar datos de una tabla a otra (INSERT...SELECT)
INSERT INTO tabla_nueva (col1, col2)
SELECT col1, col2 FROM tabla_original
WHERE condicion;
2.2. UPDATE
-- Básico
UPDATE tabla SET columna = nuevo_valor WHERE condicion;
-- Con condición compuesta
UPDATE tabla
SET email = 'ejemplo@[Link]'
WHERE apellido LIKE 'G%' AND fecha_alta > '2026-01-01';
-- Ajuste numérico (aumento/reducción) según condición
UPDATE tabla
SET precio = precio * 1.10
WHERE categoria = 'X';
-- Normalizar texto con función del motor
UPDATE tabla
SET nombre = UPPER(nombre)
WHERE condicion;
2.3. DELETE
DELETE FROM tabla WHERE condicion;
-- Todos los registros (cuidado: sin WHERE borra todo)
DELETE FROM tabla;
-- Condición numérica
DELETE FROM tabla WHERE precio <= 0;
-- Anteriores a una fecha
DELETE FROM tabla WHERE fecha < '2025-01-01';
2.4. SELECT — la más usada
Orden real de escritura de cláusulas (y orden lógico de ejecución del motor):
SELECT columnas
FROM tabla
WHERE condicion_de_filas
GROUP BY columna
HAVING condicion_de_grupos
ORDER BY columna
LIMIT n;
-- Todo
SELECT * FROM tabla;
-- Columnas específicas
SELECT nombre, precio FROM tabla;
-- Filtrado
SELECT * FROM tabla WHERE precio > 100;
-- AND / OR
SELECT * FROM tabla WHERE precio > 100 AND categoria = 'X';
SELECT * FROM tabla WHERE precio > 100 OR categoria = 'X';
-- LIKE (patrones)
SELECT * FROM tabla WHERE nombre LIKE 'A%'; -- empieza con A
SELECT * FROM tabla WHERE nombre LIKE '%a'; -- termina en a
SELECT * FROM tabla WHERE nombre LIKE '%al%'; -- contiene "al"
-- IN / NOT IN
SELECT * FROM tabla WHERE categoria IN ('X', 'Y', 'Z');
SELECT * FROM tabla WHERE categoria NOT IN ('X', 'Y');
-- BETWEEN
SELECT * FROM tabla WHERE precio BETWEEN 80 AND 90;
-- DISTINCT
SELECT DISTINCT categoria FROM tabla;
-- ORDER BY (ASC por defecto, DESC para descendente)
SELECT * FROM tabla ORDER BY precio DESC;
SELECT * FROM tabla ORDER BY categoria ASC, precio DESC; -- por si empatan
-- LIMIT
SELECT * FROM tabla ORDER BY precio DESC LIMIT 1;
-- GROUP BY + HAVING (HAVING filtra grupos, WHERE filtra filas)
SELECT categoria, COUNT(*)
FROM tabla
GROUP BY categoria
HAVING COUNT(*) > 1;
3. Funciones útiles
Agregación (van con GROUP BY o solas)
Función Qué hace
COUNT() cuenta filas
SUM() suma valores
Función Qué hace
AVG() promedio
MIN() / MAX() mínimo / máximo
SELECT COUNT(*) FROM tabla;
SELECT MAX(precio), MIN(precio) FROM tabla;
SELECT AVG(precio) FROM tabla WHERE categoria = 'X';
Numéricas
ABS(), ROUND(), FLOOR(), CEIL(), MOD()
Fechas
NOW(), CURDATE(), CURTIME(), DATEDIFF(fecha1, fecha2), SUBDATE(fecha,
dias), STR_TO_DATE(texto, formato)
Cadenas
CONCAT(), SUBSTRING(), LENGTH(), REPLACE(), UPPER(), LOWER(), INSTR()
Booleanas / condicionales
IF(condicion, valor_si, valor_no), IFNULL(expr, valor_alternativo),
NULLIF(a, b)
4. Tipos de datos (referencia rápida)
Numéricos: INT, FLOAT, DOUBLE, DECIMAL(precision, escala)
Fechas: DATE (YYYY-MM-DD), DATETIME, TIMESTAMP, TIME, YEAR
Cadenas: CHAR(n) (longitud fija), VARCHAR(n) (variable), TEXT, BLOB
Otros: BOOLEAN/TINYINT(1), JSON
5. DCL — Data Control Language
Permisos de usuarios/roles.
GRANT SELECT ON tabla TO usuario_o_rol;
GRANT ALL PRIVILEGES ON tabla TO usuario_o_rol;
REVOKE SELECT ON tabla FROM usuario_o_rol;
REVOKE ALL PRIVILEGES ON tabla FROM usuario_o_rol;
6. TCL — Transaction Control Language
Para agrupar operaciones y poder deshacerlas si algo sale mal.
BEGIN; -- inicia transacción
UPDATE tabla SET campo = valor WHERE id = 1;
SAVEPOINT punto_1; -- guarda un punto de recuperación
DELETE FROM tabla WHERE condicion;
INSERT INTO tabla (...) VALUES (...);
ROLLBACK TO punto_1; -- deshace hasta el savepoint
-- o bien:
ROLLBACK; -- deshace toda la transacción
COMMIT; -- confirma los cambios definitivamente