Gli ultimi tutorial di sviluppo web
 

SQL FOREIGN vincolo di chiave


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