¿Ya dominas lo básico? Un curso estructurado de SQL es la vía rápida para dar el salto.
Ver cursos de SQL en UdemyEnlace de afiliado. No te cuesta nada extra.
- 01Preparar el entorno (lo que necesitas)
- 02Fundamentos de la sentencia SELECT
- 03Filtrar filas con WHERE
- 04Ordenar resultados con ORDER BY
- 05Combinar tablas con JOIN
- 06Agregar datos con GROUP BY
- 07Búsqueda aproximada con LIKE
- 08Modificar datos con INSERT, UPDATE y DELETE
- 09Introducción a las subconsultas
- 10Crear una VIEW
- 11Clasificar filas con funciones de ventana
- 12Entender las transacciones
- 13Escribir comentarios en SQL
- 14Operadores lógicos: AND, OR y NOT
- 15Trabajar con valores NULL
- 16INNER JOIN frente a LEFT JOIN
- 17Filtrar agregados con HAVING
- 18Eliminar duplicados con DISTINCT
- 19Combinar resultados con UNION
- 20Valores condicionales con CASE
- 21Comprobar existencia con EXISTS
- 22Cambiar la estructura de una tabla con ALTER TABLE
- 23Auto-uniones (self join)
- 24Acelerar búsquedas con INDEX
- 25GROUP BY con varias columnas
- 26Paginación con LIMIT y OFFSET
- 27Coincidencia de patrones con GLOB
- 28Cálculos con fechas usando date()
- 29Unir tres tablas
- 30Comparar con varios valores usando IN
- 31Tablas derivadas: subconsultas en el FROM
- 32Fundamentos de TRIGGER
- 33Consultas legibles con WITH (CTE)
- 34UPSERT: insertar o actualizar en una sola sentencia
- 35Combinar MIN, MAX y AVG
- 36Restringir la entrada con restricciones CHECK
- 37Numeración automática con AUTOINCREMENT
- 38Inspeccionar el plan con EXPLAIN QUERY PLAN
- 39ORDER BY con varias columnas
- 40Agregación condicional con CASE
- 41Eliminar objetos con DROP TABLE y DROP VIEW
- 42Combinar varias CTE
- 43Búsqueda por rango de fechas con BETWEEN
- 44Encontrar lo que falta con NOT EXISTS
- 45Sustituir NULL con COALESCE
- 46Funciones de texto: UPPER, LENGTH y SUBSTR
- 47Convertir tipos con CAST
- 48Unir valores agrupados con GROUP_CONCAT
- 49Garantizar la integridad con FOREIGN KEY
- 50[Aplicado] Construye un mini sistema de biblioteca
Garantizar la integridad con FOREIGN KEY
En esta lección harás que la base de datos impida guardar referencias a registros que no existen.
FOREIGN KEY(columna) REFERENCES otra_tabla(columna) declara que ese valor debe existir en la otra tabla. Cualquier inserción que apunte a un identificador inexistente será rechazada. En SQLite hay que activar la comprobación con PRAGMA foreign_keys = ON;, porque por compatibilidad viene desactivada.
El código de ejemplo relaciona préstamos con libros. Prueba a insertar un préstamo con book_id igual a 99 y verás cómo la base de datos lo rechaza.
Ese PRAGMA es la sorpresa característica de SQLite: sin él, las claves foráneas se declaran pero no se comprueban, y la gente cree tener integridad cuando no la tiene. Además hay que decidir qué pasa al borrar el registro referenciado, con ON DELETE CASCADE (borra también los hijos) o ON DELETE RESTRICT (impide el borrado).
Los datos huérfanos — un pedido cuyo cliente ya no existe — son de los problemas más molestos de arreglar, porque se descubren tarde y no hay forma de reconstruir la información perdida. Las claves foráneas los hacen imposibles desde el primer día.
💡 El motor de SQL puede tardar unos segundos en cargarse la primera vez que ejecutas código.
