Code : SQL
CREATE TABLE [IF NOT EXISTS] Nom_table (
colonne1 description_colonne1,
[colonne2 description_colonne2,
colonne3 description_colonne3,
...,]
[ [CONSTRAINT [symbole_contrainte]] FOREIGN KEY
(colonne(s)_clé_étrangère) REFERENCES table_référence
(colonne(s)_référence)]
)
[ENGINE=moteur];
Donc si on imagine les tables Client et Commande, pour créer la table Commande avec une clé étrangère ayant pour référence la
colonne numero de la table Client, on utilisera :
Code : SQL
CREATE TABLE Commande (
numero INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
client INT UNSIGNED NOT NULL,
produit VARCHAR(40),
quantite SMALLINT DEFAULT 1,
CONSTRAINT fk_client_numero
-- On donne un nom à notre
clé
FOREIGN KEY (client)
-- Colonne sur laquelle on
crée la clé
REFERENCES Client(numero)
-- Colonne de référence
)
ENGINE=InnoDB;
-- MyISAM interdit, je le
rappelle encore une fois !
Après création de la table
Tout comme pour les clés primaires, pour créer une clé étrangère après création de la table, il faut utiliser ALTER TABLE.
Code : SQL
ALTER TABLE Commande
ADD CONSTRAINT fk_client_numero FOREIGN KEY client REFERENCES
Client(numero);
Suppression d'une clé étrangère
Il peut y avoir plusieurs clés étrangères par table. Par conséquent, lors d'une suppression il faut identifier la clé à détruire. Cela se
fait grâce au symbole de la contrainte.
Code : SQL
ALTER TABLE nom_table
DROP FOREIGN KEY symbole_contrainte
Modification de notre base
Maintenant que vous connaissez les clés étrangères, nous allons en profiter pour modifier notre base et ajouter quelques tables
afin de préparer le prochain chapitre, qui portera sur les jointures.
Jusqu'à maintenant, la seule information sur l'espèce des animaux de notre élevage était son nom courant. Nous voudrions
maintenant stocker aussi son nom latin, ainsi qu'une petite description. Que faire ? Ajouter deux colonnes à notre table ?
Partie 2 : Index, jointures et sous-requêtes
93/414
www.openclassrooms.com
CREATE TABLE [IF NOT EXISTS] Nom_table (
colonne1 description_colonne1,
[colonne2 description_colonne2,
colonne3 description_colonne3,
...,]
[ [CONSTRAINT [symbole_contrainte]] FOREIGN KEY
(colonne(s)_clé_étrangère) REFERENCES table_référence
(colonne(s)_référence)]
)
[ENGINE=moteur];
Donc si on imagine les tables Client et Commande, pour créer la table Commande avec une clé étrangère ayant pour référence la
colonne numero de la table Client, on utilisera :
Code : SQL
CREATE TABLE Commande (
numero INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
client INT UNSIGNED NOT NULL,
produit VARCHAR(40),
quantite SMALLINT DEFAULT 1,
CONSTRAINT fk_client_numero
-- On donne un nom à notre
clé
FOREIGN KEY (client)
-- Colonne sur laquelle on
crée la clé
REFERENCES Client(numero)
-- Colonne de référence
)
ENGINE=InnoDB;
-- MyISAM interdit, je le
rappelle encore une fois !
Après création de la table
Tout comme pour les clés primaires, pour créer une clé étrangère après création de la table, il faut utiliser ALTER TABLE.
Code : SQL
ALTER TABLE Commande
ADD CONSTRAINT fk_client_numero FOREIGN KEY client REFERENCES
Client(numero);
Suppression d'une clé étrangère
Il peut y avoir plusieurs clés étrangères par table. Par conséquent, lors d'une suppression il faut identifier la clé à détruire. Cela se
fait grâce au symbole de la contrainte.
Code : SQL
ALTER TABLE nom_table
DROP FOREIGN KEY symbole_contrainte
Modification de notre base
Maintenant que vous connaissez les clés étrangères, nous allons en profiter pour modifier notre base et ajouter quelques tables
afin de préparer le prochain chapitre, qui portera sur les jointures.
Jusqu'à maintenant, la seule information sur l'espèce des animaux de notre élevage était son nom courant. Nous voudrions
maintenant stocker aussi son nom latin, ainsi qu'une petite description. Que faire ? Ajouter deux colonnes à notre table ?
Partie 2 : Index, jointures et sous-requêtes
93/414
www.openclassrooms.com
