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

Comment ajouter une clé étrangère en SQL ?

Comment ajouter une clé étrangère en SQL

La clé étrangère est un attribut ou un ensemble d'attributs qui fait référence à la clé primaire de la même table ou d'une autre table (relation).

  • Création de clé étrangère avec création de table

Une clé étrangère peut être créée même au moment de la création des tables.

Syntaxe :

CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

Exemple :

Tout d'abord, nous allons créer une base de données avec le nom "employeedb ”. Ensuite, dans cette base de données, nous créerons deux tables « employé » et « département ». Nous considérerons ces tables et cette base de données pour tous les exemples suivants.

Nous allons créer une clé primaire et une clé étrangère lors de la création des tables « employé » et « service » respectivement.

mysql> USE employeedb;
 Database changed
 mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40));
 Query OK, 0 rows affected (0.07 sec)
 mysql> DESC employee;
 +------------+-------------+------+-----+---------+-------+
 | Field      | Type        | Null | Key | Default | Extra |
 +------------+-------------+------+-----+---------+-------+
 | Emp_ID     | int(11)     | NO   | PRI | NULL    |       |
 | Emp_Name   | varchar(40) | YES  |     | NULL    |       |
 | Emp_Salary | varchar(40) | YES  |     | NULL    |       |
 +------------+-------------+------+-----+---------+-------+
 3 rows in set (0.09 sec)
 mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID));
 Query OK, 0 rows affected (0.20 sec)
 mysql> DESC department;
 +-----------+-------------+------+-----+---------+-------+
 | Field     | Type        | Null | Key | Default | Extra |
 +-----------+-------------+------+-----+---------+-------+
 | Dept_ID   | int(11)     | NO   | PRI | NULL    |       |
 | Dept_Name | varchar(40) | YES  |     | NULL    |       |
 | Emp_ID    | int(11)     | NO   | MUL | NULL    |       |
 +-----------+-------------+------+-----+---------+-------+
 3 rows in set (0.02 sec) 

Nous avons créé deux clés primaires "Emp_ID" pour une table "employee", "Dept_ID" pour la table "department" et "Emp_ID" comme clé étrangère pour la table "department" lors de la création de tables. Pour vérifier si les clés sont ajoutées aux tables ou non, nous avons utilisé la commande DESC.

  • Création de clé étrangère avec nom de contrainte

Une clé étrangère peut être créée même au moment de la création de tables avec le nom de la contrainte. Ce nom de contrainte sera utile lors de la suppression d'une clé étrangère d'une table sans supprimer une table entière.

Syntaxe :

CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), CONSTRAINT ConstraintName FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

Exemple :

Nous allons créer une clé primaire et une clé étrangère lors de la création des tables « employé » et « département » respectivement. La clé étrangère sera créée avec la contrainte de clé étrangère lors de la création de la table elle-même.

 mysql> USE employeedb;
 Database changed
 mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40));
 Query OK, 0 rows affected (0.11 sec)
 mysql> DESC employee;
 +------------+-------------+------+-----+---------+-------+
 | Field      | Type        | Null | Key | Default | Extra |
 +------------+-------------+------+-----+---------+-------+
 | Emp_ID     | int(11)     | NO   | PRI | NULL    |       |
 | Emp_Name   | varchar(40) | YES  |     | NULL    |       |
 | Emp_Salary | varchar(40) | YES  |     | NULL    |       |
 +------------+-------------+------+-----+---------+-------+
 3 rows in set (0.01 sec)
 mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, CONSTRAINT emp_id_fk FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID));
 Query OK, 0 rows affected (0.25 sec)
 mysql> DESC department;
 +-----------+-------------+------+-----+---------+-------+
 | Field     | Type        | Null | Key | Default | Extra |
 +-----------+-------------+------+-----+---------+-------+
 | Dept_ID   | int(11)     | NO   | PRI | NULL    |       |
 | Dept_Name | varchar(40) | YES  |     | NULL    |       |
 | Emp_ID    | int(11)     | NO   | MUL | NULL    |       |
 +-----------+-------------+------+-----+---------+-------+
 3 rows in set (0.04 sec) 

Nous avons créé deux clés primaires "Emp_ID" pour une table "employee", "Dept_ID" pour la table "department" et "Emp_ID" comme clé étrangère pour la table "department" lors de la création de tables. Ici, nous avons également ajouté une contrainte de clé étrangère nommée "emp_id_fk". Pour vérifier si les clés sont ajoutées aux tables ou non, nous avons utilisé la commande DESC.

  • Création de clé étrangère à l'aide de la commande ALTER

Il est possible de créer une clé étrangère même après la création de la table. Lors de la création d'une table, si nous n'y avons pas ajouté de clé étrangère et après cela, nous devons ajouter la clé étrangère à une table existante, nous utiliserons la commande ALTER dans ce cas.

Syntaxe :

ALTER TABLE Parent_TableName ADD FOREIGN KEY(ColumnName) REFERENCES Child_TableName(ColumnName);

Exemple :

Nous allons ajouter une clé étrangère à une table existante à l'aide de la commande ALTER.

 mysql> USE employeedb;
 Database changed
 mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40));
 Query OK, 0 rows affected (0.16 sec)
 mysql> DESC employee;
 +------------+-------------+------+-----+---------+----------------+
 | Field      | Type        | Null | Key | Default | Extra          |
 +------------+-------------+------+-----+---------+----------------+
 | Emp_ID     | int(11)     | NO   | PRI | NULL    | auto_increment |
 | Emp_Name   | varchar(40) | YES  |     | NULL    |                |
 | Emp_Salary | varchar(40) | YES  |     | NULL    |                |
 +------------+-------------+------+-----+---------+----------------+
 3 rows in set (0.01 sec)
 mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL);
 Query OK, 0 rows affected (0.12 sec)
 mysql> ALTER TABLE department ADD FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID);
 Query OK, 0 rows affected (0.23 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 mysql> DESC department;
 +-----------+-------------+------+-----+---------+----------------+
 | Field     | Type        | Null | Key | Default | Extra          |
 +-----------+-------------+------+-----+---------+----------------+
 | Dept_ID   | int(11)     | NO   | PRI | NULL    | auto_increment |
 | Dept_Name | varchar(40) | YES  |     | NULL    |                |
 | Emp_ID    | int(11)     | NO   | MUL | NULL    |                |
 +-----------+-------------+------+-----+---------+----------------+
 3 rows in set (0.01 sec) 

Nous avons créé deux clés primaires « Emp_ID » pour une table « employé » et « Dept_ID » pour la table « département » lors de la création des tables. Ensuite, en utilisant la commande ALTER, nous avons ajouté "Emp_ID" comme clé étrangère à la table du département. Pour vérifier si les clés sont ajoutées aux tables ou non, nous avons utilisé la commande DESC.