Cuando trabajas con integridad referencial en una base de datos relacional, debes tener en cuenta las restricciones de claves foráneas al realizar borrados y actualizaciones.
Cuando una tabla A tiene una clave foránea que referencia a la tabla B, no puedes eliminar un registro en B si hay registros en A que lo referencian, a menos que configures la clave foránea con ciertas opciones.
ON DELETE
)Al crear una relación con FOREIGN KEY
, puedes definir cómo manejar los borrados:
ON DELETE RESTRICT
o sin especificar
ON DELETE CASCADE
ON DELETE SET NULL
NULL
.NULL
.ON DELETE NO ACTION
RESTRICT
, no permite eliminar si hay referencias en la tabla hija.ON DELETE CASCADE
CREATE TABLE clientes (
id_cliente INT PRIMARY KEY,
nombre VARCHAR(100)
);
CREATE TABLE pedidos (
id_pedido INT PRIMARY KEY,
id_cliente INT,
FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ON DELETE CASCADE
);
💡 Si eliminas un cliente, también se eliminan sus pedidos:
DELETE FROM clientes WHERE id_cliente = 1;
Si necesitas actualizar la clave primaria de un registro referenciado en otra tabla, debes considerar el uso de ON UPDATE
en la clave foránea.
ON UPDATE
)ON UPDATE CASCADE
ON UPDATE SET NULL
NULL
.ON UPDATE NO ACTION
o ON UPDATE RESTRICT
ON UPDATE CASCADE
CREATE TABLE clientes (
id_cliente INT PRIMARY KEY,
nombre VARCHAR(100)
);
CREATE TABLE pedidos (
id_pedido INT PRIMARY KEY,
id_cliente INT,
FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ON UPDATE CASCADE
);
💡 Si cambias el id_cliente
, también se actualizará en pedidos
:
UPDATE clientes SET id_cliente = 100 WHERE id_cliente = 1;
✅ Evita actualizaciones en claves primarias, ya que pueden afectar el rendimiento.
✅ Usa ON DELETE CASCADE
con precaución, ya que puede eliminar datos no deseados.
✅ Si no puedes eliminar registros, revisa restricciones FOREIGN KEY
con INFORMATION_SCHEMA
:
SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = 'tu_base_de_datos';