Articles

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 a NULL 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 de NULL 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 en NULL 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.