Tutoriel SQL

ACCUEIL SQL Introduction SQL Syntaxe SQL Sélection SQL SQL Select Distinct SQL Où SQL et, ou, pas Tri SQL par Insertion SQL dans Valeurs nulles SQL Mise à jour SQL Supprimer SQL SQL Sélectionner Haut Min et Max SQL Nombre SQL, Moy, Somme J'aime SQL Caractères génériques SQL Entrée SQL SQL Entre Alias ​​SQL Jointures SQL Jointure interne SQL Jointure gauche SQL Jointure droite SQL Jointure complète SQL Auto-jointure SQL Union SQL Regrouper SQL par SQL ayant SQL existe SQL Tout, Tout SQL Sélectionner dans Insertion SQL dans la sélection Cas SQL Fonctions nulles SQL Procédures stockées SQL Commentaires SQL Opérateurs SQL

Base de données SQL

SQL Créer une base de données BD de suppression SQL Base de données de sauvegarde SQL Créer une table SQL Table de dépôt SQL Table de modification SQL Contraintes SQL SQL non nul SQL unique Clé primaire SQL Clé étrangère SQL Vérification SQL SQL par défaut Index SQL Incrément automatique SQL Dates SQL Vues SQL Injection SQL Hébergement SQL Types de données SQL

Références SQL

Mots clés SQL Fonctions MySQL Fonctions SQL Server Fonctions MS Access Référence rapide SQL

Exemples SQL

Exemples SQL Questionnaire SQL Exercices SQL Certificat SQL

Contrainte SQL FOREIGN KEY


Contrainte SQL FOREIGN KEY

La FOREIGN KEYcontrainte est utilisée pour empêcher les actions qui détruiraient les liens entre les tables.

A FOREIGN KEYest un champ (ou une collection de champs) dans une table, qui fait référence à PRIMARY KEYdans une autre table.

La table avec la clé étrangère est appelée la table enfant et la table avec la clé primaire est appelée la table référencée ou parente.

Regardez les deux tableaux suivants :

Tableau des personnes

PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20

Tableau des commandes

OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Notez que la colonne "PersonID" de la table "Orders" pointe vers la colonne "PersonID" de la table "Persons".

La colonne "PersonID" dans la table "Persons" est la PRIMARY KEYdans la table "Persons".

La colonne "PersonID" dans la table "Commandes" est un FOREIGN KEYdans la table "Commandes".

La FOREIGN KEYcontrainte empêche l'insertion de données non valides dans la colonne de clé étrangère, car il doit s'agir de l'une des valeurs contenues dans la table parent.



CLÉ ÉTRANGÈRE SQL sur CREATE TABLE

Le SQL suivant crée un FOREIGN KEYsur la colonne "PersonID" lorsque la table "Orders" est créée :

MySQL :

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

SQL Server/Oracle/MS Access :

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

Pour autoriser la dénomination d'une FOREIGN KEYcontrainte et pour définir une FOREIGN KEYcontrainte sur plusieurs colonnes, utilisez la syntaxe SQL suivante :

MySQL/SQL Server/Oracle/MS Access :

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);

CLÉ ÉTRANGÈRE SQL sur ALTER TABLE

Pour créer une FOREIGN KEYcontrainte sur la colonne "PersonID" alors que la table "Orders" est déjà créée, utilisez le SQL suivant :

MySQL/SQL Server/Oracle/MS Access :

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

Pour autoriser la dénomination d'une FOREIGN KEYcontrainte et pour définir une FOREIGN KEYcontrainte sur plusieurs colonnes, utilisez la syntaxe SQL suivante :

MySQL/SQL Server/Oracle/MS Access :

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

Supprimer une contrainte FOREIGN KEY

Pour supprimer une FOREIGN KEYcontrainte, utilisez le SQL suivant :

MySQL :

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server/Oracle/MS Access :

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;