Database
 sql >> Base de données >  >> RDS >> Database

Comment créer une table avec une clé étrangère en SQL

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