INSERT IF NOT EXISTS dans MySQL

Preet Sanghavi 28 mars 2022
INSERT IF NOT EXISTS dans MySQL

Dans ce tutoriel, nous visons à comprendre comment utiliser la clause INSERT IF NOT EXISTS dans une table de la base de données MySQL.

Nous insérons souvent certaines valeurs dans une colonne particulière d’une table sans vérifier leur existence dans la table. Cependant, il est parfois nécessaire d’éviter les valeurs en double lors de leur insertion dans une table particulière.

Prenons l’exemple d’un concessionnaire automobile. Lors de l’insertion de données dans la table cars, nous ne voulons pas que le car id d’un type de voiture particulier soit inséré deux fois dans notre table.

MySQL nous fournit la clause INSERT IF NOT EXISTS qui nous aide à effectuer cette opération efficacement. La syntaxe de base pour INSERT IF NOT EXISTS est la suivante.

INSERT INTO name_of_the_table (column_name)
SELECT * FROM (SELECT value_name) AS val
WHERE NOT EXISTS (<conditonal expression>);

Dans le name_of_the_table on insère le value_name dans le column_name si conditonal expression est remplie.

Mais avant de commencer, créons un jeu de données factice.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

INSERT IF NOT EXISTS dans MySQL

Comprenons comment utiliser le INSERT IF NOT EXISTS dans MySQL en insérant un nouvel étudiant nommé Preet avec le stu_id comme 8.

Cependant, nous n’insérerons cette valeur que si les prénoms des étudiants existants dans le tableau ne correspondent pas à Preet. Nous pouvons effectuer cette opération en utilisant la requête suivante.

INSERT INTO student_details(stu_id,stu_firstName, stu_lastName)
SELECT * FROM (SELECT 8 as stu_id, 'Preet' AS customer_name, 'Shah' AS stu_lastName) AS new_value
WHERE NOT EXISTS (
    SELECT stu_firstName FROM student_details WHERE stu_firstName = 'Preet'
) LIMIT 1;

Maintenant, vérifiez la table student_details avec la requête suivante.

SELECT * from student_information;

La requête susmentionnée nous donnera la sortie suivante.

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

Comme nous pouvons le voir, aucune nouvelle valeur n’a été ajoutée à la table car le prénom Preet existe déjà dans la table student_details.

Essayons d’ajouter un autre étudiant avec stu_id comme 9 et stu_firstName comme Dhruv et stu_lastName comme Shah. Nous pouvons effectuer cette opération en utilisant la requête suivante.

INSERT INTO student_details(stu_id,stu_firstName, stu_lastName)
SELECT * FROM (SELECT 9 as stu_id, 'Dhruv' AS customer_name, 'Shah' AS stu_lastName) AS new_value
WHERE NOT EXISTS (
 SELECT stu_firstName FROM student_details WHERE stu_firstName = 'Dhruv'
) LIMIT 1;

Comme on le voit dans la requête ci-dessus, nous ajoutons l’étudiant avec stu_firstName comme Dhruv s’il n’existe pas déjà dans la table.

La sortie de la requête susmentionnée est la suivante.

stu_id	stu_firstName	stu_lastName
1		Preet			Sanghavi
2		Rich			John
3		Veron			Brow
4		Preet			Jos
5		Hash			Shah
6		Sachin			Parker
7		David			Miller
9		Dhruv			Shah

Une nouvelle entrée, Dhruv Shah avec stu_id comme 9, a été créée car il n’y a pas de doublons dans le prénom.

Ainsi, à l’aide de l’instruction INSERT IF NOT EXISTS, nous pouvons entrer efficacement des détails dans une table étant donné que la valeur à insérer répond à la condition requise dans la clause NOT EXISTS dans MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Article connexe - MySQL Query