Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Oracle/PLSQL: clave externa con eliminación en cascada
Este tutorial de Oracle explica cómo usar Claves foráneas eliminadas en cascada Sintaxis y ejemplos en Oracle.
¿Cuál es la clave externa para Cascade DELETE en Oracle?
Una clave externa para eliminaciones en cascada significa que si se elimina un registro en la tabla principal, el registro correspondiente en la tabla secundaria se eliminará automáticamente. Esto se llama eliminación en cascada en Oracle.
Se puede definir una clave externa con capacidad de eliminación en cascada en la instrucción CREATE TABLE o ALTER TABLE.
Usando la sentencia CREATE TABLE
sintaxis
La sintaxis para crear una clave externa con eliminación en cascada mediante la declaración CREATE TABLE en Oracle/PLSQL es:
CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT fk_column FOREIGN KEY (column1, column2, ... column_n) REFERENCES parent_table (column1, column2, ... column_n) ON DELETE CASCADE );
ejemplo
Veamos un ejemplo de cómo crear una clave externa con eliminación en cascada usando la instrucción CREATE TABLE en Oracle/PLSQL.
Por ejemplo:
CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ON DELETE CASCADE );
En este ejemplo, creamos una clave principal en la tabla proveedor denominada proveedor_pk. Contiene un solo campo: el campo id_proveedor. Luego creamos una clave externa en la tabla de productos llamada fk_supplier que hace referencia a la tabla de proveedores según el campo de ID del proveedor.
Debido a las eliminaciones en cascada, cuando se elimina un registro en la tabla de proveedores, también se eliminan todos los registros en la tabla de productos con el mismo valor de ID_proveedor.
También podemos crear una clave externa (con eliminación en cascada) con múltiples campos, como en el siguiente ejemplo:
CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, supplier_name varchar2(50) not null, CONSTRAINT fk_supplier_comp FOREIGN KEY (supplier_id, supplier_name) REFERENCES supplier(supplier_id, supplier_name) ON DELETE CASCADE );
En este ejemplo, nuestra clave externa llamada fk_foreign_comp hace referencia a la tabla Proveedores en función de dos campos: los campos IdProveedor y NombreProveedor.
Una eliminación en cascada en una clave foránea llamada fk_foreign_comp da como resultado una eliminación en cascada de todos los registros correspondientes en la tabla de productos según la identificación y el nombre del proveedor cuando se elimina un registro en la tabla de proveedores.
Usando la instrucción ALTER TABLE
sintaxis
La sintaxis para crear una clave externa mediante la eliminación en cascada en una declaración ALTER TABLE de Oracle/PLSQL es:
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column1, column2, ... column_n) REFERENCES parent_table (column1, column2, ... column_n) ON DELETE CASCADE;
ejemplo
Veamos un ejemplo de cómo crear una clave externa con eliminación en cascada usando la instrucción ALTER TABLE en Oracle/PLSQL.
Por ejemplo:
ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ON DELETE CASCADE;
En este ejemplo, hemos creado una clave externa (con eliminación en cascada) denominada fk_supplier que hace referencia a la tabla de proveedores según el campo id_proveedor.
También podemos crear una clave externa (con eliminación en cascada) con múltiples campos, como en el siguiente ejemplo:
ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id, supplier_name) REFERENCES supplier(supplier_id, supplier_name) ON DELETE CASCADE;