Tema 8 · Claves Foráneas

Vista de Relaciones y Claves Foráneas (Foreign Keys con CASCADE)

Aprende a configurar Claves Foráneas (Foreign Keys) en phpMyAdmin mediante la Vista de Relaciones y a dominar las cláusulas ON DELETE y ON UPDATE CASCADE.

¿Qué es una Clave Foránea (Foreign Key) y para qué Sirve?

Una Clave Foránea es una restricción de integridad referencial que vincula una columna de una tabla secundaria (hija) con la clave primaria de otra tabla principal (padre).

Por ejemplo, en una tienda online, la columna pedidos.usuario_id debe apuntar obligatoriamente a un usuarios.id existente. Si intentas registrar un pedido para un usuario que no existe, el motor rechazará la inserción de inmediato, evitando datos huérfanos.

Los 3 Requisitos Previos Obligatorios

Antes de intentar crear una relación en phpMyAdmin, asegúrate de cumplir estas tres reglas o recibirás el molesto Error #1005: Can't create table (errno: 150):

  1. Motor InnoDB: Ambas tablas deben usar obligatoriamente el motor InnoDB.
  2. Tipos de Datos Idénticos: Si usuarios.id es INT UNSIGNED, entonces pedidos.usuario_id debe ser exactamente INT UNSIGNED (mismo tipo, longitud y atributos).
  3. Índice Creado: La columna en la tabla secundaria debe tener previamente un índice asignado (en la pestaña Estructura, pulsa en Índice sobre la columna usuario_id).

Paso a Paso en la "Vista de Relaciones"

  1. Haz clic en la tabla secundaria (ejemplo: pedidos).
  2. Ve a la pestaña superior Estructura.
  3. Justo debajo de la lista de columnas, haz clic en el enlace "Vista de relaciones" (Relation view).
  4. En el formulario de restricciones de clave foránea:
    • Nombre de restricción: fk_pedidos_usuarios
    • Columna: Selecciona usuario_id
    • Tabla de destino: Selecciona usuarios
    • Columna de destino: Selecciona id
    • ON DELETE (Al borrar):
      • RESTRICT: Impide eliminar un usuario si aún tiene pedidos asociados (¡Máxima seguridad!).
      • CASCADE: Si eliminas el usuario, se borran automáticamente todos sus pedidos en cascada.
      • SET NULL: Si eliminas el usuario, el campo usuario_id en el pedido se convierte en NULL.
    • ON UPDATE (Al actualizar): Selecciona CASCADE (si el ID del usuario cambia, se actualiza en sus pedidos).
  5. Haz clic en Guardar. ¡La relación física ha quedado establecida en el motor!

⚡ Sentencia SQL de Restricción de Clave Foránea (DDL)

Código que phpMyAdmin ejecuta internamente al guardar la relación:

clave-foranea.sql
Solo lectura
-- Agregar restricción de clave foránea entre pedidos y usuarios
ALTER TABLE `pedidos`
  ADD CONSTRAINT `fk_pedidos_usuarios`
  FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
  ON DELETE RESTRICT
  ON UPDATE CASCADE;

-- Comprobar restricciones activas en la tabla
SELECT 
  CONSTRAINT_NAME, 
  TABLE_NAME, 
  COLUMN_NAME, 
  REFERENCED_TABLE_NAME, 
  REFERENCED_COLUMN_NAME 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE TABLE_SCHEMA = 'tienda_online' AND TABLE_NAME = 'pedidos';
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
¿Qué comportamiento tiene la cláusula "ON DELETE RESTRICT" en una clave foránea configurada en phpMyAdmin?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual de phpMyAdmin: Gestión de Bases de Datos y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.