MySQL FOREIGN KEY Vincolo
MySQL FOREIGN KEY Vincolo
Il FOREIGN KEY
vincolo viene utilizzato per impedire azioni che distruggono i collegamenti tra le tabelle.
A FOREIGN KEY
è un campo (o una raccolta di campi) in una tabella, che fa riferimento a PRIMARY KEY
in un'altra tabella.
La tabella con la chiave esterna è denominata tabella figlio e la tabella con la chiave primaria è denominata tabella di riferimento o padre.
Osserva le due tabelle seguenti:
Tabella delle persone
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
Tabella degli ordini
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Si noti che la colonna "PersonID" nella tabella "Ordini" punta alla colonna "PersonID" nella tabella "Persone".
La colonna "PersonID" nella tabella "Persone" è quella PRIMARY KEY
nella tabella "Persone".
La colonna "PersonID" nella tabella "Ordini" è una
FOREIGN KEY
nella tabella "Ordini".
Il FOREIGN KEY
vincolo impedisce l'inserimento di dati non validi nella colonna della chiave esterna, poiché deve essere uno dei valori contenuti nella tabella padre.
CHIAVE STRANIERA su CREATE TABLE
Il seguente SQL crea una FOREIGN KEY
nella colonna "PersonID" quando viene creata la tabella "Ordini":
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Per consentire la denominazione di un FOREIGN KEY
vincolo e per definire un
FOREIGN KEY
vincolo su più colonne, utilizzare la seguente sintassi SQL:
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
CHIAVE STRANIERA su ALTER TABLE
Per creare un FOREIGN KEY
vincolo sulla colonna "PersonID" quando la tabella "Ordini" è già stata creata, utilizzare il seguente SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
Per consentire la denominazione di un FOREIGN KEY
vincolo e per definire un
FOREIGN KEY
vincolo su più colonne, utilizzare la seguente sintassi SQL:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
RILASCIA un vincolo CHIAVE ESTERA
Per eliminare un FOREIGN KEY
vincolo, utilizzare il seguente SQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;