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:
(
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:
(
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:
(
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:
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:
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:
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
DROP CONSTRAINT fk_PerOrders
Otras extensiones