Problème :
Vous souhaitez créer une clé étrangère pour une table dans une base de données.
Exemple :
Nous aimerions créer une table nommée student
qui contient une clé étrangère qui fait référence à l'id
colonne dans le tableau city
.
Solution 1 (nouveau tableau) :
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT FOREIGN KEY REFERENCES city(id) );
Discussion :
Pour créer une nouvelle table contenant une colonne de clé étrangère qui fait référence à une autre table, utilisez le mot-clé FOREIGN KEY REFERENCES
à la fin de la définition de cette colonne. Suivez cela avec le nom de la table référencée et le nom de la colonne référencée entre parenthèses.
Dans notre exemple, nous créons la table student
en utilisant un CREATE TABLE
clause. Nous listons les noms des colonnes et mettons leurs types de données respectifs entre parenthèses. La colonne city_id
est la clé étrangère de cette table et indique la valeur de l'ID stocké dans la colonne id
dans le tableau city
. Nous écrivons FOREIGN KEY REFERENCES
à la fin de la définition de cette colonne et faites-la suivre de la table et de la colonne référencées :city(id)
.
N'oubliez pas que vous pouvez créer plusieurs clés étrangères pour une table.
Solution 2 (nouveau tableau) :
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) );
Discussion :
Une autre façon de définir une clé étrangère lors de la création de la table consiste à utiliser les FOREIGN KEY REFERENCES
clause à la fin des définitions de colonne. Dans ce cas, après la FOREIGN KEY
clause, nous désignons la colonne de clé étrangère. Vient ensuite les REFERENCES
clause avec le nom de la table et de la colonne référencées.
Vous pouvez créer des clés étrangères sur plusieurs colonnes, comme indiqué ci-dessous :
Solution 3 (nouveau tableau) :
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) );
Dans cet exemple, la contrainte fk_student_score_subject_id
est une clé étrangère composée de deux colonnes :score_id
et subject_id
. Ces deux colonnes de clé étrangère font référence à deux colonnes de la table score_subject
– score_id
et subject_id
.
Voici un autre exemple :
Solution 4 (nouveau tableau) :
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) );
Discussion :
Dans ce code, nous avons à nouveau la CONSTRAINT
clause avec le nom de cette contrainte. Utilisez des noms faciles à lire et à comprendre. Dans notre exemple, nous utilisons le nom fk_student_city_id
, qui indique la table et la colonne pertinentes. Ensuite, nous écrivons FOREIGN KEY
et ajoutez (entre parenthèses) le nom de la colonne qui devient la clé étrangère. Ensuite, nous avons les REFERENCES
clause suivie du nom de la table et de la colonne référencées (ici :id
).
Solution 5 (tableau existant) :
ALTER TABLE student ADD FOREIGN KEY (city_id) REFERENCES city(id);
Discussion :
Il est également possible d'ajouter une nouvelle clé étrangère à une table existante. Ici, la table est modifiée à l'aide d'un ALTER TABLE
clause. Le nom de la table (dans notre exemple, student
) est placé après le ALTER TABLE
mot-clé. Ensuite, le ADD FOREIGN KEY
clause est suivi du nom de la colonne qui sera utilisée comme clé étrangère. Ensuite, nous avons la REFERENCES clause
avec le nom de la table référencée et le nom de la colonne de clé primaire entre parenthèses.
Notez que la table que vous modifiez doit exister avant que cette commande ne soit exécutée.
Solution 6 (table existante, contrainte de clé étrangère) :
ALTER TABLE student ADD CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id)
Discussion :
Utilisez une requête comme celle-ci si vous souhaitez nommer une colonne de clé étrangère comme contrainte pour une table existante. Ici, la contrainte de clé étrangère est nommée fk_student_city_id
. Si vous ne spécifiez pas le nom de la contrainte, la base de données génère un nom de contrainte par défaut (qui varie selon la base de données).