SQL FOREIGN KEYRestricciones


Restricción FOREIGN KEY de SQL

Una FOREIGN KEY en una tabla apunta a una UNIQUE KEY (clave de restricción única) en otra tabla.

Expliquemos la clave externa con un ejemplo. Observe las siguientes dos tablas:

Tabla "Persons":

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Tabla "Orders":

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Tenga en cuenta que la columna "P_Id" de la tabla "Orders" apunta a la columna "P_Id" de la tabla "Persons".

La columna "P_Id" de la tabla "Persons" es la PRIMARY KEY de la tabla "Persons".

La columna "P_Id" de la tabla "Orders" es la FOREIGN KEY de la tabla "Orders".

La restricción FOREIGN KEY se utiliza para prevenir acciones que destruyan la conexión entre tablas.

La restricción FOREIGN KEY también evita que se inserten datos ilegales en la columna de clave externa, porque debe ser uno de los valores de la tabla a la que apunta.


Restricción FOREIGN KEY de SQL en CREATE TABLE

El siguiente SQL crea una restricción FOREIGN KEY en la columna "P_Id" cuando se crea la tabla "Orders":

MySQL:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

Para nombrar la restricción FOREIGN KEY y definir restricciones FOREIGN KEY en varias columnas, use la siguiente sintaxis SQL:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)


Restricción FOREIGN KEY de SQL en ALTER TABLE

Cuando la tabla "Orders" ya se haya creado, para crear una restricción FOREIGN KEY en la columna "P_Id", use el siguiente SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Para nombrar la restricción FOREIGN KEY y definir restricciones FOREIGN KEY en varias columnas, use la siguiente sintaxis SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)


Eliminar la restricción FOREIGN KEY

Para eliminar la restricción FOREIGN KEY, use el siguiente SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

Otras extensiones