SQL FOREIGN KEYContraintes
Contrainte SQL FOREIGN KEY
Une FOREIGN KEY dans une table pointe vers une UNIQUE KEY (une clé avec une contrainte unique) dans une autre table.
Expliquons la clé étrangère avec un exemple. Regardez les deux tables suivantes :
Table "Persons" :
| P_Id | LastName | FirstName | Adresse | Ville |
|---|---|---|---|---|
| 1 | Hansen | Ola | Timoteivn 10 | Sandnes |
| 2 | Svendson | Tove | Borgvn 23 | Sandnes |
| 3 | Pettersen | Kari | Storgt 20 | Stavanger |
Table "Orders" :
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
Notez que la colonne "P_Id" de la table "Orders" pointe vers la colonne "P_Id" de la table "Persons".
La colonne "P_Id" de la table "Persons" est la PRIMARY KEY de la table "Persons".
La colonne "P_Id" de la table "Orders" est la FOREIGN KEY de la table "Orders".
La contrainte FOREIGN KEY est utilisée pour empêcher les actions qui détruiraient les liens entre les tables.
La contrainte FOREIGN KEY empêche également l'insertion de données invalides dans la colonne de clé étrangère, car elle doit être l'une des valeurs de la table vers laquelle elle pointe.
Contrainte FOREIGN KEY SQL sur CREATE TABLE
Le SQL suivant crée une contrainte FOREIGN KEY sur la colonne "P_Id" lorsque la table "Orders" est créée :
MySQL:
(
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:
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
Pour nommer 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:
(
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)
)
Contrainte FOREIGN KEY SQL sur ALTER TABLE
Lorsque la table "Orders" a déjà été créée, pour créer une contrainte FOREIGN KEY sur la colonne "P_Id", utilisez le SQL suivant :
MySQL / SQL Server / Oracle / MS Access:
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Pour nommer 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:
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
DROP une contrainte FOREIGN KEY
Pour supprimer une contrainte FOREIGN KEY, utilisez le SQL suivant :
MySQL:
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
DROP CONSTRAINT fk_PerOrders
Autres extensions