
Eliminar un registro en una tabla MySQL que está referenciado por una clave foránea puede ser complicado. La clave foránea asegura la integridad referencial entre las tablas, lo que significa que no puedes simplemente borrar un registro si otra tabla depende de él. Aquí te explicamos cómo hacerlo de forma segura y correcta.
¿Qué es una Clave Foránea?
Primero, entendamos qué es una clave foránea. Imagina que tienes dos tablas: `clientes` y `pedidos`. La tabla `pedidos` tiene una columna `cliente_id` que hace referencia al `id` en la tabla `clientes`. `cliente_id` en `pedidos` es la clave foránea. Esto significa que cada pedido está asociado a un cliente existente. Si intentas borrar un cliente que tiene pedidos asociados, MySQL te impedirá hacerlo por defecto.
Opciones para Eliminar un Registro con Clave Foránea
Existen principalmente tres maneras de abordar este problema:
Must Read
1. Eliminar Primero los Registros Dependientes
La forma más común y segura es eliminar primero los registros en la tabla que referencia la clave foránea. En nuestro ejemplo, eliminaríamos primero los pedidos asociados al cliente que queremos borrar.
Ejemplo:

DELETE FROM pedidos WHERE cliente_id = 123;
DELETE FROM clientes WHERE id = 123;
Aquí, `123` es el ID del cliente que queremos eliminar. Primero, borramos todos los pedidos asociados a ese cliente y luego borramos el cliente.
2. Usar ON DELETE CASCADE
`ON DELETE CASCADE` es una opción que se define al crear la clave foránea. Indica a MySQL que, cuando se elimina un registro en la tabla principal (la que tiene la clave primaria), automáticamente elimine también los registros correspondientes en la tabla que tiene la clave foránea.
Importante: Usa `ON DELETE CASCADE` con precaución. Si no se configura correctamente, puede resultar en la eliminación inesperada de datos.

Ejemplo de Creación de Tabla con ON DELETE CASCADE:
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE
);
Con esta configuración, si eliminas un cliente, todos sus pedidos se eliminarán automáticamente.
Ejemplo de Eliminación (después de configurar ON DELETE CASCADE):

DELETE FROM clientes WHERE id = 123;
MySQL se encargará de eliminar los pedidos asociados a ese cliente.
3. Usar ON DELETE SET NULL
Similar a `ON DELETE CASCADE`, `ON DELETE SET NULL` establece la columna de la clave foránea a `NULL` cuando se elimina el registro referenciado. Esto requiere que la columna de la clave foránea permita valores `NULL`.
Ejemplo de Creación de Tabla con ON DELETE SET NULL:

CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT NULL,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE SET NULL
);
Ejemplo de Eliminación (después de configurar ON DELETE SET NULL):
DELETE FROM clientes WHERE id = 123;
Después de esto, todos los pedidos que tenían `cliente_id = 123` ahora tendrán `cliente_id = NULL`.
Consideraciones Finales
Siempre realiza un respaldo de tu base de datos antes de realizar cualquier operación de eliminación. Comprende completamente las relaciones entre tus tablas y las consecuencias de usar `ON DELETE CASCADE` o `ON DELETE SET NULL`. En la mayoría de los casos, eliminar primero los registros dependientes es la opción más segura y controlada.