Qué es una FOREIGN KEY en SQL y para qué se utiliza

Una FOREIGN KEY en SQL, es una clave (campo de una columna) que sirve para relacionar dos tablas. El campo FOREIGN KEY se relaciona o vincula con la PRIMARY KEY de otra tabla de la bbdd.

La tabla secundaria es la que contiene la FOREIGN KEY y la tabla principal contiene la PRIMARY KEY.

La FOREIGN KEY es una restricción que no permite que se agreguen o inserten datos que no válidos en la columna de foreign key, ya que los valores que se van a insertar deben ser valores que se encuentren o ya estén en la tabla con la que se quiere relacionar.


Crear una FOREIGN KEY al crear una tabla con CREATE TABLE

El siguiente SQL crea una FOREIGN KEY en la columna «ID_Persona» cuando se crea la tabla «Pedidos«:

CREATE TABLE Pedidos (
    PedidoID int NOT NULL PRIMARY KEY,
    NumeroPedido int NOT NULL,
    PersonaID int FOREIGN KEY REFERENCES Personas(PersonaID)
);

Un pedido en la tabla de pedidos que no tuviera un ID de cliente correspondiente en la Tabla de clientes sería imposible de relacionar.

Para asegurarse de que es imposible añadir valores de ID_Cliente a la tabla de pedidos que no existen en la tabla de clientes, use la restricción FOREIGN KEY


FOREIGN KEY en varias columnas

Para declarar la restricción FOREIGN KEY en varias columnas, fíjese en la sintaxis del ejemplo:

CREATE TABLE Pedidos (
    PedidoID int NOT NULL,
    NumeroPedido int NOT NULL,
    PersonaID int,
    PRIMARY KEY (PedidoID),
    CONSTRAINT FK_PedidoPersona FOREIGN KEY (PersonaID)
    REFERENCES Personas(PersonaID)
);

Crear una FOREIGN KEY en una tabla SQL con ALTER TABLE

Realiza una restricción FOREIGN KEY en la columna «Cliente_ID» cuando y exista la tabla «Pedidos«:

ALTER TABLE Pedidos
ADD FOREIGN KEY (PersonaID) REFERENCES Personas(Cliente_ID);

A continuación puedes ver en el siguiente ejemplo cómo definir una FOREIGN KEY en varias columnas a la vez:

ALTER TABLE Pedidos
ADD CONSTRAINT FK_Pedido_Cliente
FOREIGN KEY (PersonaID) REFERENCES Clientes(Cliente_ID);

Cómo eliminar una FOREIGN KEY Con la sentencia DROP

Elimina la restricción FOREIGN KEY en una tabla determinada:

ALTER TABLE Pedidos
DROP CONSTRAINT FK_Pedido_Cliente;