SQL FOREIGN KEY Constraint
Une clé étrangère dans un des points de table à une clé primaire dans une autre table.
Illustrons la clé étrangère avec un exemple. Regardez les deux tableaux suivants:
Le "Persons" tableau:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Le "Orders" tableau:
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Notez que le "P_Id" colonne dans les "Orders" points de table à la "P_Id" colonne dans le "Persons" table.
Le "P_Id" colonne dans le "Persons" table est la clé primaire dans la "Persons" table.
Le "P_Id" colonne dans le "Orders" table est une clé étrangère dans la "Orders" table.
La contrainte FOREIGN KEY est utilisé pour prévenir les actions qui détruiraient les liens entre les tables.
La contrainte FOREIGN KEY empêche également des données non valides d'être insérée dans la colonne de clé étrangère, car elle doit être l'une des valeurs contenues dans le tableau il pointe.
SQL FOREIGN KEY Constraint sur CREATE TABLE
Le SQL suivante crée une clé étrangère sur la "P_Id" colonne lorsque le "Orders" table est créée:
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)
)
Pour permettre nommage d'une contrainte FOREIGN KEY, et pour définir une contrainte FOREIGN KEY sur plusieurs colonnes, utilisez la syntaxe SQL suivante:
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 FOREIGN KEY Constraint sur ALTER TABLE
Pour créer une contrainte FOREIGN KEY sur la "P_Id" colonne lorsque le "Orders" table est déjà créé, utilisez l'instruction SQL suivante:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Pour permettre nommage d'une contrainte FOREIGN KEY, et pour définir une contrainte FOREIGN KEY sur plusieurs colonnes, utilisez la syntaxe SQL suivante:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Pour supprimer une contrainte FOREIGN KEY
Pour supprimer une contrainte FOREIGN KEY, utilisez l'instruction SQL suivante:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders