SQL Server: clave externa con eliminación en cascada

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.

SQL Server: clave externa con eliminación en cascada

Este tutorial de SQL Server describe cómo usar Claves foráneas eliminadas en cascada Sintaxis y ejemplos en SQL Server.

¿Qué es una clave externa Cascade DELETE en SQL Server?

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 denomina eliminación en cascada en SQL Server.

Se puede crear una clave externa con capacidad de eliminación en cascada mediante la declaración CREATE TABLE o la declaración ALTER TABLE.

Para crear claves foráneas con eliminaciones en cascada, use la declaración CREATE TABLE

sintaxis

La sintaxis para crear una clave externa con eliminación en cascada mediante la instrucción CREATE TABLE en SQL Server (Transact-SQL) es:

CREATE TABLE child_table
(
  column1 datatype [ NULL | NOT NULL ],
  column2 datatype [ NULL | NOT NULL ],
  ...

  CONSTRAINT fk_name
    FOREIGN KEY (child_col1, child_col2, ... child_col_n)
    REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
    ON DELETE CASCADE
    [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
);

child_table El nombre de la tabla secundaria que desea crear. column1, column2 Las columnas que desea crear en la tabla. Cada columna debe tener un tipo de datos. La columna debe definirse como NULL o NOT NULL, si este valor se deja en blanco, la base de datos asume NULL como valor predeterminado. fk_name El nombre de la restricción de clave externa que desea crear. child_col1, child_col2, … child_col_n Columnas en child_table que harán referencia a la clave principal en parent_table. parent_table El nombre de la tabla principal cuya clave principal se usará en child_table. parent_col1, parent_col2, … parent_col3 Las columnas que componen la clave principal en parent_table. La clave foránea hará cumplir el vínculo entre estos datos y las columnas child_col1, child_col2, … child_col_n en child_table. ON DELETE CASCADE Especifica que los datos secundarios se eliminan cuando se eliminan los datos principales. AL ACTUALIZAR Opcional. Especifica cómo manejar los datos secundarios cuando se actualizan los datos principales. Puede elegir SIN ACCIÓN, CASCADA, ESTABLECER NULO o ESTABLECER POR DEFECTO. SIN ACCIÓN Se utiliza junto con ON DELETE o ON UPDATE. Esto significa que cuando los datos principales se eliminan o actualizan, no se realiza ninguna acción en los datos secundarios. CASCADE se usa junto con ON DELETE o ON UPDATE. Esto significa que cuando los datos principales se eliminan o actualizan, los datos secundarios se eliminan o actualizan. SET NULL Se utiliza junto con ON DELETE o ON UPDATE. Esto significa que los datos secundarios se establecen en NULL cuando los datos principales se eliminan o actualizan. SET DEFAULT se usa junto con ON DELETE o ON UPDATE. Esto significa que cuando los datos principales se eliminan o actualizan, los datos secundarios se establecen en sus valores predeterminados.

ejemplo

Veamos un ejemplo de cómo usar la instrucción CREATE TABLE en SQL Server (Transact-SQL) para crear una clave externa con capacidad de eliminación en cascada.

Por ejemplo:

CREATE TABLE products
( product_id INT PRIMARY KEY,
  product_name VARCHAR(50) NOT NULL,
  category VARCHAR(25)
);

CREATE TABLE inventory
( inventory_id INT PRIMARY KEY,
  product_id INT NOT NULL,
  quantity INT,
  min_level INT,
  max_level INT,
  CONSTRAINT fk_inv_product_id
    FOREIGN KEY (product_id)
    REFERENCES products (product_id)
    ON DELETE CASCADE
);

En este ejemplo de clave externa, creamos la tabla principal como la tabla de productos. La tabla de productos tiene una clave principal que consiste en el campo product_id.

A continuación, creamos una segunda tabla llamada inventario, que será la tabla secundaria en esta clave externa y el ejemplo de eliminación en cascada. Creamos una clave externa denominada fk_inv_product_id en la tabla de inventario utilizando la instrucción CREATE TABLE. La clave externa establece una relación entre la columna product_id en la tabla de inventario y la columna product_id en la tabla de productos.

Para esta clave externa, especificamos la cláusula ON DELETE CASCADE, que le dice a SQL Server que elimine el registro correspondiente en la tabla secundaria al eliminar datos en la tabla principal. Entonces, en este ejemplo, si el valor de product_id se elimina de la tabla de productos, el registro correspondiente en la tabla de inventario que usa ese product_id también se eliminará.

Para crear claves foráneas con eliminaciones en cascada, use la declaración ALTER TABLE

sintaxis

La sintaxis para crear una clave externa con eliminación en cascada mediante la declaración ALTER TABLE en SQL Server (Transact-SQL) es:

ALTER TABLE child_table
ADD CONSTRAINT fk_name
    FOREIGN KEY (child_col1, child_col2, ... child_col_n)
    REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
    ON DELETE CASCADE;

child_table El nombre de la tabla secundaria que desea modificar. fk_name El nombre de la restricción de clave externa que desea crear. child_col1, child_col2, … child_col_n Columnas en child_table que harán referencia a la clave principal en parent_table. parent_table El nombre de la tabla principal cuya clave principal se usará en child_table. parent_col1, parent_col2, … parent_col3 Las columnas que componen la clave principal en parent_table. La clave foránea hará cumplir el vínculo entre estos datos y las columnas child_col1, child_col2, … child_col_n en child_table. ON DELETE CASCADE Especifica que los datos secundarios se eliminan cuando se eliminan los datos principales.

ejemplo

Veamos un ejemplo de cómo usar la instrucción ALTER TABLE en SQL Server (Transact-SQL) para crear una clave externa con capacidad de eliminación en cascada.

Por ejemplo:

ALTER TABLE inventory
ADD CONSTRAINT fk_inv_product_id
    FOREIGN KEY (product_id)
    REFERENCES products (product_id)
    ON DELETE CASCADE;

En este ejemplo de clave externa, hemos creado una clave externa en la tabla de inventario llamada fk_inv_product_id que hace referencia a la tabla de productos según el campo product_id.

Para esta clave externa, especificamos la cláusula ON DELETE CASCADE, que le dice a SQL Server que elimine el registro correspondiente en la tabla secundaria al eliminar datos en la tabla principal. Entonces, en este ejemplo, si el valor de product_id se elimina de la tabla de productos, el registro correspondiente en la tabla de inventario que usa ese product_id también se eliminará.