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:

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 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:

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)
)


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:

ALTER TABLE Orders
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:

ALTER TABLE Orders
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:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

Autres extensions