Ranga Babu
cascade as delete rule on a foreign key in SQL Server

ELIMINAR EN CASCADA y ACTUALIZAR CASCADA en la clave externa de SQL Server

December 6, 2019 by

En este artículo, vamos a repasar las reglas ELIMINAR EN CASCADA y ACTUALIZAR EN CASCADA en la clave externa de SQL Server con diferentes ejemplos.

ELIMINAR EN CASCADA: Cuando creamos una clave foránea utilizando esta opción, elimina las filas de referencia en la tabla secundaria cuando la fila referenciada se elimina en la tabla primaria que tiene una clave primaria.

ACTUALIZAR CASCADA: cuando creamos una clave externa utilizando ACTUALIZAR CASCADA, las filas de referencia se van a actualizar en la tabla secundaria cuando la fila referenciada se actualiza en la tabla principal que tiene una clave primaria.

Discutiremos los siguientes temas en este artículo:

  1. Creación de la regla ELIMINAR y ACTUALIZAR CASCADA en una clave externa usando el estudio de administración de SQL Server
  2. Crear la regla ELIMINAR y ACTUALIZAR CASCADA en una clave foránea utilizando el script T-SQL
  3. Se lanzará en una tabla con una clave externa en cascada ELIMINAR o ACTUALIZAR

Veamos cómo poder crear una clave foránea con las reglas ELIMINAR y ACTUALIZAR CASCADA junto con algunos ejemplos.

Crear una clave foránea con las reglas ELIMINAR y ACTUALIZAR CASCADA

Usando la Guía de SQL Server Management Studio:

Inicie sesión en SQL Server con SQL Server Management Studio, diríjase a la carpeta Claves (Keys) en la tabla secundaria. Haga clic derecho en la carpeta Claves (Keys) y seleccione Nueva clave externa.

Edite la especificación de tablas y columnas haciendo clic en… como se muestra en la siguiente imagen.

DELETE CASCADE foreign key in SQL Server

Seleccione la tabla primaria y la columna de clave principal en la tabla primaria. Seleccione la columna de clave externa en la tabla secundaria. Haga clic en OK y consulte la imagen que se muestra a continuación.

Primary and Foreign key column mapping

En las especificaciones INSERTAR y ACTUALIZAR, seleccione Cascada para la regla de eliminación.

cascade as delete rule on a foreign key in SQL Server

Haga clic en Cerrar y guarde la tabla en el diseñador. Haga clic en en la ventana del mensaje de advertencia.

warning window

Una vez que se haga clic en , se va a crear una clave externa con la regla de eliminación. De manera similar, podemos crear una clave foránea con la regla ACTUALIZAR CASCADA, seleccionando CASCADA como una acción para la regla de actualización en las especificaciones INSERTAR y ACTUALIZAR.

Foreign key in SQL Server

Usando T-SQL:

Consulte el siguiente script T-SQL, la cual crea una tabla principal, secundaria y una clave externa en la tabla secundaria con la regla ELIMINAR EN CASCADA.

Inserte algunos datos de muestra utilizando el script T-SQL a continuación.

Sample data

Ahora eliminé una fila en la tabla primaria con CountryID = 1 que a su vez también elimina las filas en la tabla secundaria que tiene CountryID = 1.

deleting row in parent table

Ahora consulte el siguiente script T-SQL, para poder crear una clave foránea con la regla ACTUALIZAR CASCADA.

Ahora actualice CountryID en los países para una fila que también actualice las filas de referencia en los estados de la tabla secundaria.

update cascade rule in SQL Server foreign key

El siguiente es el script T-SQL que va a crear una clave foránea en cascada, como reglas ACTUALIZAR y ELIMINAR.

Para poder conocer las acciones de actualización y eliminación en la clave externa, consulte la vista sys.foreign_keys. Reemplace el nombre de restricción en el script.

La siguiente imagen nos muestra que una acción de ELIMINAR EN CASCADA y ninguna acción de ACTUALIZAR están definidas en la clave externa.

delete and update rules in SQL Server foreign key

Avancemos y verifiquemos el comportamiento de las reglas de eliminación y actualización de las claves externas en una tabla secundaria que actúa como tabla primaria para otra tabla secundaria. El siguiente ejemplo demuestra este escenario.

En este caso, “Países” es la tabla principal de la tabla “Estados” y la tabla “Estados” es la tabla principal de la tabla Ciudades.

Ahora vamos a crear una clave externa en cascada como regla de eliminación en la tabla de Estados que hace referencia a CountryID en la tabla principal Países.

Ahora en la tabla Ciudades vamos a crear una clave foránea sin una regla de ELIMINAR EN CASCADA.

Si intentamos eliminar un registro con CountryID = 1, arrojará un error ya que al eliminar en la tabla principal “Países” intenta eliminar las filas de referencia en los de la tabla secundaria Estados. Pero en la tabla Ciudades”, tenemos una restricción de clave externa sin acción para eliminar y el valor referenciado todavía existe en la tabla.

La eliminación falla en la segunda clave externa.

multiple childs

Cuando creamos la segunda clave externa en cascada como regla de eliminación, el comando de eliminación anterior se ejecuta con éxito al eliminar registros en la tabla secundaria “Estados” que a su vez elimina registros en la segunda tabla secundaria “Ciudades“.

Se desencadena en una tabla con la eliminación en cascada o la actualización de la clave externa en cascada

No se puede crear un desencadenador o trigger en lugar de actualizar en la tabla, si ya existe una clave externa activada con ACTUALIZAR CASCADA en la tabla. Nos lanza un error: “No se puede crear EN VEZ DE ELIMINAR o EN VEZ DE ACTUALIZAR “nombre de lanzamiento” en la tabla “nombre de tabla”. Esto se debe a que la tabla tiene una CLAVE EXTRERNA con ELIMINAR o ACTUALIZAR en cascada”.

INSTEAD OF TRIGGERS on table with foreign key

Del mismo modo, no podemos crear un desencadenador EN VEZ DE ELIMINAR en la tabla cuando ya existe una regla de CASCADE DELETE de clave externa en la tabla.

Conclusión

En este artículo, exploramos algunos ejemplos sobre las reglas ELIMINAR EN CASCADA y ACTUALIZAR CASCADA en la clave externa de SQL Server. En caso de que tenga alguna duda o consulta, no dude en preguntar en la sección de comentarios a continuación.

Consulte este artículo, La clave externa de SQL Server para poder obtener más detalles sobre las reglas de eliminación y actualización en la clave externa de SQL Server.

Ranga Babu
5,778 Views