Vincolo SQL FOREIGN KEY
- Pagina precedente Chiave primaria SQL
- Pagina successiva SQL Check
Vincolo SQL FOREIGN KEY
Una CHIAVE ESTERNA in una tabella si riferisce alla CHIAVE PRIMARIA di un'altra tabella.
Facciamo un esempio per spiegare la CHIAVE ESTERNA. Guarda le seguenti tabelle:
Tabella "Persons":
Id_P | Cognome | Nome | Indirizzo | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Chang'an Street | Pechino |
Tabella "Orders":
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
Attenzione, la colonna "Id_P" nella tabella "Orders" punta alla colonna "Id_P" nella tabella "Persons".
La colonna "Id_P" nella tabella "Persons" è la CHIAVE PRIMARIA della tabella "Persons".
La colonna "Id_P" nella tabella "Orders" è una CHIAVE ESTERNA della tabella "Orders".
La constraint CHIAVE ESTERNA è utilizzata per prevenire azioni che possono distruggere le connessioni tra tabelle.
La constraint CHIAVE ESTERNA può anche prevenire l'inserimento di dati illegali nella colonna di chiave esterna, poiché deve essere uno dei valori della tabella a cui si riferisce.
Constraint CHIAVE ESTERNA su CREATE TABLE
Il seguente SQL crea una CHIAVE ESTERNA per la colonna "Id_P" nella tabella "Orders":
MySQL:
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), CHIAVE ESTERNA (Id_P) RIFERISCE A Persons(Id_P) )
SQL Server / Oracle / MS Access:
CREATE TABLE Orders ( Id_O int NOT NULL PRIMARY KEY, OrderNo int NOT NULL, Id_P int FOREIGN KEY REFERENCES Persons(Id_P) )
Se si desidera dare un nome all'obbligo FOREIGN KEY e definire un obbligo FOREIGN KEY per più colonne, utilizzare il seguente sintassi SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
Obbligo FOREIGN KEY SQL su ALTER TABLE
Se si crea un obbligo FOREIGN KEY per la colonna "Id_P" mentre la tabella "Orders" esiste già, utilizzare il seguente SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
Se si desidera dare un nome all'obbligo FOREIGN KEY e definire un obbligo FOREIGN KEY per più colonne, utilizzare il seguente sintassi SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
Revoca l'obbligo FOREIGN KEY
Se si desidera revocare l'obbligo 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
- Pagina precedente Chiave primaria SQL
- Pagina successiva SQL Check