SQL Server FOREIGN KEY (Español)
Resumen: En este tutorial, aprenderá a usar la restricción de clave externa de SQL Server para imponer un vínculo entre los datos de dos tablas.
Introducción a la restricción de clave externa de SQL Server
considere las siguientes tablas vendor_groups
y vendors
:
cada proveedor pertenece a un grupo de proveedores y cada grupo de proveedores puede tener cero o más proveedores. La relación entre las tablas vendor_groups
y vendors
es de uno a muchos.,
para cada fila en la tabla vendors
, siempre puede encontrar una fila correspondiente en la tabla vendor_groups
.
sin embargo, con la configuración de tablas actual, puede insertar una fila en la tabla vendors
sin una fila correspondiente en la tabla vendor_groups
. Del mismo modo, también puede eliminar una fila en la tabla vendor_groups
sin actualizar o eliminar las filas correspondientes en la tabla vendors
que resulte en filas huérfanas en la tabla vendors
.,
para hacer cumplir el enlace entre los datos en las tablas vendor_groups
y vendors
, debe establecer una clave externa en la tabla vendors
.
una clave foránea es una columna o un grupo de columnas en una tabla que identifica de forma única una fila de otra tabla (o la misma tabla en caso de autorreferencia).
para crear una clave foránea, utilice la restricción FOREIGN KEY
.,
las siguientes instrucciones eliminan la tabla vendors
y la recrean con una restricción FOREIGN KEY
:
la tabla vendor_groups
ahora se denomina tabla principal, que es la tabla a la que hace referencia la restricción de clave foránea. La tabla vendors
se denomina tabla secundaria, que es la tabla a la que se aplica la restricción de clave foránea.,
en la instrucción anterior, la siguiente cláusula crea una restricción FOREIGN KEY
llamada fk_group
que vincula la group_id
en la tabla vendors
a la group_id
en la tabla vendor_groups
:
sintaxis de restricción de clave externa de SQL Server
la sintaxis general para crear una restricción FOREIGN KEY
es la siguiente:
examinemos esta sintaxis en detalle.,
primero, especifique el nombre de restricción FOREIGN KEY
después de la palabra clave CONSTRAINT
. El nombre de la restricción es opcional, por lo que es posible definir una restricción FOREIGN KEY
de la siguiente manera:
en este caso, SQL Server generará automáticamente un nombre para la restricción FOREIGN KEY
.
en segundo lugar, especifique una lista de columnas de clave foránea separadas por comas y encerradas entre paréntesis después de la palabra clave FOREIGN KEY
.,
En tercer lugar, especifique el nombre de la tabla principal a la que hace referencia la clave foránea y una lista de columnas separadas por comas que tiene un vínculo con la columna de la tabla secundaria.
ejemplo de restricción de clave externa de SQL Server
primero, inserte algunas filas en la tabla vendor_groups
:
segundo, inserte un nuevo proveedor con un grupo de proveedores en la tabla vendors
:
Code language: SQL (Structured Query Language) (sql)
la declaración funcionó como se esperaba.,
En tercer lugar, intente insertar un nuevo proveedor cuyo grupo de proveedores no exista en la tablavendor_groups
:
Code language: SQL (Structured Query Language) (sql)
SQL Server emitió el siguiente error:
en este ejemplo, debido a la restricciónFOREIGN KEY
la inserción y emitió un error.
acciones referenciales
La restricción de clave foránea garantiza la integridad referencial. Significa que solo puede insertar una fila en la tabla secundaria si hay una fila correspondiente en la tabla principal.,
Además, la restricción de clave externa permite definir las acciones referenciales cuando la fila de la tabla principal se actualiza o elimina de la siguiente manera:
El ON UPDATE
y ON DELETE
especificar la acción que se ejecutará cuando una fila de la tabla principal es actualizar y eliminar., Las siguientes son las acciones permitidas : NO ACTION
, CASCADE
, SET NULL
y SET DEFAULT
Eliminar acciones de filas en la matriz de la tabla
Si usted eliminar una o más filas de la tabla primaria, puede establecer una de las siguientes acciones:
-
ON DELETE NO ACTION
: SQL Server genera un error y revierte la acción de eliminación de la fila de la tabla padre. -
ON DELETE CASCADE
: SQL Server elimina las filas de la tabla secundaria que corresponden a la fila eliminada de la tabla principal., -
ON DELETE SET NULL
: SQL Server establece las filas de la tabla secundaria aNULL
si las filas correspondientes de la tabla principal se eliminan. Para ejecutar esta acción, las columnas de clave foránea deben ser nullables. -
ON DELETE SET DEFAULT
SQL Server establece las filas de la tabla secundaria en sus valores predeterminados si se eliminan las filas correspondientes de la tabla principal. Para ejecutar esta acción, las columnas de clave foránea deben tener definiciones predeterminadas. Tenga en cuenta que una columna anulable tiene un valor predeterminado deNULL
si no se especifica ningún valor predeterminado.,
de forma predeterminada, SQL Server aplicaON DELETE NO ACTION
si no especifica explícitamente ninguna acción.
acción de actualización de filas en la tabla principal
Si actualiza una o más filas en la tabla principal, puede establecer una de las siguientes acciones:
-
ON UPDATE NO ACTION
: SQL Server genera un error y devuelve la acción de actualización en la fila de la tabla principal. -
ON UPDATE CASCADE
: SQL Server actualiza las filas correspondientes de la tabla secundaria cuando se actualizan las filas de la tabla principal., -
ON UPDATE SET NULL
: SQL Server establece las filas de la tabla secundaria enNULL
cuando se actualiza la fila correspondiente en la tabla principal. Tenga en cuenta que las columnas de clave foránea deben ser nullables para que esta acción se ejecute. -
ON UPDATE SET DEFAULT
: SQL Server establece los valores predeterminados para las filas de la tabla secundaria que tienen actualizadas las filas correspondientes de la tabla principal.