Comment insérer une ligne si elle n'existe pas dans MySQL

Rayven Esplanada 30 janvier 2023
  1. Utilisez REPLACE pour insérer si elle n’existe pas dans MySQL
  2. Utilisez INSERT IGNORE pour insérer si elle n’existe pas dans MySQL
  3. Utilisez INSERT ... ON DUPLICATE KEY UPDATE pour insérer si elle n’existe pas dans MySQL
Comment insérer une ligne si elle n'existe pas dans MySQL

Ce tutoriel vous montre comment insérer une ligne dans une table si elle n’existe pas encore dans mySQL.

Il y a trois façons simples d’accomplir ce problème, en utilisant REPLACE, INSERT IGNORE, ou INSERT ... ON DUPLICATE KEY UPDATE.

Tout d’abord, imaginons que nous ayons une table person structurée comme telle :

CREATE TABLE person (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
address VARCHAR(128) 
);

Avec les enregistrements existants suivants :

id name age address
1 John Doe 27 New York, New York
2 Jane Doe 26 Berlin, Germany
3 Chun Li 24 Beijing, China
4 Thor Odinson 40 Asgard

Passons maintenant aux solutions réelles.

Utilisez REPLACE pour insérer si elle n’existe pas dans MySQL

Ce que fait REPLACE est qu’il écrase les enregistrements existants lorsqu’il est trouvé ; s’il n’existe pas encore, il insère une nouvelle ligne. C’est essentiellement comme la mise à jour, mais avec la possibilité d’insérer.

Fournissons un exemple de requête pour exécuter REPLACE dans John Doe.

REPLACE INTO 'person'
SET id = 1,
name = 'John Doe'`,
age = 28,
address = 'Los Angeles, California'

Si John Doe existe, il sera écrasé avec les nouvelles données ; s’il n’existe pas, cela créera une nouvelle entrée pour John Doe.

Cependant, cette méthode n’est pas efficace pour l’insertion car elle écrase les enregistrements existants au lieu de simplement les sauter s’ils sont trouvés. Même si elle permet de faire le travail, ce n’est pas la meilleure façon de le faire.

Le nouveau résultat de la recherche en sélectionnant John Doe sera le même :

id name age address
1 John Doe 28 Los Angeles, California

L’âge et l’adresse de John Doe ont été modifiés ou mis à jour par le script REPLACE.

Utilisez INSERT IGNORE pour insérer si elle n’existe pas dans MySQL

Nous utiliserons pour cela également les mêmes données non éditées que celles du tableau ci-dessus.

Sur INSERER IGNORE, si la clé primaire de l’enregistrement est déjà présente dans le DataFrame, elle sera discrètement ignorée ou ignorée.

Si nous enlevons le mot-clé IGNORE, l’insertion d’un enregistrement avec un identifiant ou une clé primaire existante annulera la requête et affichera un message d’erreur indiquant que l’enregistrement avec la clé primaire existe déjà.

Après le mot-clé INSERT, le mot-clé IGNORE est un substitut à l’avortement à cause de l’erreur, et au lieu de cela, il continue la requête sans insérer un nouvel enregistrement.

INSERT IGNORE person
SET 'id' = 4,
age = 1000,
address = 'Chicago'

D’après le tableau que nous avons déclaré ci-dessus, un enregistrement avec un id ou une clé primaire 4 existe déjà (Thor Odinson). Par conséquent, cette requête est ignorée par le script et ne permet donc pas de mettre à jour ou d’insérer un enregistrement dans le DataFrame.

Le résultat si nous interrogeons Thor en person serait :

id name age address
4 Thor Odinson 40 Asgard

L’âge et l’adresse dans la requête n’ont pas du tout affecté la ligne avec id 4.

Utilisez INSERT ... ON DUPLICATE KEY UPDATE pour insérer si elle n’existe pas dans MySQL

Si vous utilisez la clause ON DUPLICATE KEY UPDATE et que la ligne que vous voulez insérer est un double dans un index ou une clé primaire UNIQUE, la ligne exécutera une UPDATE.

Ceci fait essentiellement la même chose que le REPLACE.

Supposons que nous voulions insérer un enregistrement avec id 2

INSERT INTO person (id, name, age, address)
VALUES (1, 'Jane Deer', '33', 'Tallahassee Florida')
ON DUPLICATE KEY UPDATE id = id+1;

L’id est incrémenté pour générer un nouvel enregistrement au lieu de mettre à jour l’enregistrement existant.

Si nous interrogeons toutes les lignes de person, le résultat sera le suivant :

id name age address
1 John Doe 27 New York, New York
2 Jane Doe 26 Berlin, Germany
3 Chun Li 24 Beijing, China
4 Thor Odinson 40 Asgard
5 Jane Deer 33 Tallahasee, Florida

Jane Deer, au lieu de remplacer Jane Doe, est ajouté comme nouvel enregistrement dans la table.

La façon la plus efficace de procéder à l’insertion et à la vérification de son existence est sans aucun doute d’utiliser INSERT IGNORE.

Cependant, les deux autres mots-clés sont également utilisables au cas par cas, si jamais vous voulez mettre à jour si une ligne que vous voulez insérer existe, utilisez REPLACE. Si vous ne voulez pas que la ligne soit modifiée mais que vous voulez vraiment insérer le nouvel enregistrement, utilisez INSERT ... ON DUPLICATE KEY UPDATE.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn