SQL FOREIGN KEY Vincolo
Una chiave esterna in una tabella punti a una chiave primaria in un'altra tabella.
Illustriamo la chiave esterna con un esempio. Guardate i due tabelle seguenti:
Il "Persons" tabella:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Il "Orders" tabella:
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Si noti che il "P_Id" colonna in "Orders" punti di tabella per il "P_Id" colonna nella "Persons" tavolo.
Il "P_Id" colonna nella "Persons" tavolo è la chiave primaria nella "Persons" tavolo.
Il "P_Id" colonna nella "Orders" tabella è una chiave esterna nella "Orders" tavolo.
Vincolo di chiave esterna viene utilizzata per prevenire azioni che distruggerebbero i collegamenti tra le tabelle.
Il vincolo FOREIGN KEY impedisce anche dati non validi venga inserita nella colonna chiave esterna, perché deve essere uno dei valori contenuti nella tabella a cui punta.
SQL Vincolo della chiave esterna su CREATE TABLE
Il seguente SQL crea una chiave esterna sul "P_Id" colonna quando il "Orders" si crea tabella:
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)
)
Per consentire la denominazione di un vincolo FOREIGN KEY, e per la definizione di un vincolo di chiave esterna più colonne, utilizzare la seguente sintassi 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)
)
SQL Vincolo della chiave esterna su ALTER TABLE
Per creare un vincolo FOREIGN KEY sulla "P_Id" colonna quando il "Orders" tavolo è già stato creato, utilizzare il seguente SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Per consentire la denominazione di un vincolo FOREIGN KEY, e per la definizione di un vincolo di chiave esterna più colonne, utilizzare la seguente sintassi SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Per eliminare un vincolo FOREIGN KEY
Per eliminare un vincolo FOREIGN KEY, utilizzare il seguente SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders